Lexicographically Largest

看看官方题解,来用“exchanging argument”证明一下

假设不选最小的满足条件的v,选了个更大的v1,那么对于最终的序列如果没有ai+iv,那么显然将v1换成v更好,否则的话考虑aj+jvj=ai+iv(i<j),那么如果位置j可以选出一个v使得aj+jv=ai+iv1,那么让ivjv答案不变,否则的话j任选一个v2都有aj+jv2>ai+iv1,随便选一个v2,再重复上述过程(i.e.考虑是否存在k>j,有k产生的数与此时j产生的数相同)

然后可以看看这个评论,他这么构造肯定是上界,但是我没有找到一种构造方法

update 2024.8.17

找到构造方法了。我们先将所有数加上下标得到新的数列(并将新数列从大到小排序)。如果说S是可重集的话,肯定就做完了。但现在S不是可重集,那么存在一种情况就是一些数可以被减一然后去填补空缺。举个例子,如果说新数列有三个7和两个1,那么答案显然就是7 6 5 1 0,也就是说两个7填补了6,5这两个空缺,一个1填补了0这个空缺。不难想到一种构造方法,在保证已有的非空缺不会成为空缺的情况下,将非空缺多余的数全部向前移动。比如上面这个例子,非空缺有71两个,7有三个副本,1有两个副本,我们在两个非空缺都至少保留一个副本的前提下,让剩余的副本向前移动。具体来说,我们观察新数列,假设1的第一个副本在7的第一个副本后面(比如新数列为7 1 1 7 7,那么7的第一个副本在位置一,1的第一个副本在位置二),那么我们把1放到多重集中(如果先放7的话,所有1的副本都会往前移动了),然后将新数列进行对应的改变(i.e.1的第一个副本后面所有的数全部减一),然后再考察这个新数列并重复上面的操作,用数学归纳法可以证明这个构造方法是上界

posted @   最爱丁珰  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示