首先二分一个答案x,然后我们把>=x的数看成1,<x的数看成0,那如果最后剩下1,这个答案就是合法的. 那我们就来算让某一位得1至少需要填几个1(设这个值是f[i]) i=1..n时,显然,如果i已经固定,f[i]=0或inf(取决于原来是1还是0):如果i还没有固定,那f[i]=1 然后每次就可以由前三个转移到最后一个,也就是取这三个中f[i]较小的两个相加(转移过去的是1,当且仅当3个里有至少2个1) 这个转移和队列很像,所以可以直接用队列维护. 最后我们看f[最后那位数]是否多于还没填的…