比赛的时候卡题了,这题当时没有看。。。。。
题意比较简单,不介绍了
简单整理整理思想吧,有些细节的东西是看了标程才明朗起来。
题目要求答案是最多收集几个桃子。
这种比较容易想到是二分
10^4的数据,必须是0(nlgn)以下的算法,二分的话就已经是0(lgn)了,所以下面的验证需要0(n)的算法
有10^4的位置,每个位置最多又可能有10^4个桃子,所以肯定不是一个一个桃子的枚举,而是一个位置一个位置的枚举
简略说一下0(n)的验证吧
比如验证是否可以取k个桃子
很明显,找的肯定是连续的k个桃子,并且最近距离肯定是向中位数走
比如一个区间吧,从l到r,中位数是mid
这个区间包含l位置的所有桃子
对于mid位置,包含l到mid位置的所有桃子总数-(k + 1)/ 2个桃子
对于r位置,包含r位置的l到r位置的所有桃子总数-k个桃子
下一步的变化就是3个位置起码有一个变化,我们才会做改动
具体的操作时取这三个位置桃子数的最小值,每个位置递增这个最小值个
若超出的即可进一个位置,否则不变
这样可保证0(n)的枚举