Watering an Array

我们发现每次操作二之后序列都会变成全\(0\),所以全\(0\)序列是一个非常特殊的序列,我们考虑从他开始的最大收益是多少

由于我们接下来只能实施操作一,所以我们可以发现,任意一个时刻我们都不可能有两个位置满足\(a_i=i\),可以反证,假设\(a_i=i,a_j=j,j>i\),那么对于\(j\)来说,肯定被加了\(j\)次,而这\(j\)次一定也会加到\(i\)上面,所以\(a_i=j>i\),矛盾(其实也不难发现任何时刻的序列\(a\)都是一个非减序列,所以这个引理也是比较显然的)

所以我们的最大收益就是\(\lfloor \frac{d}{2}\rfloor\),即一次操作一后紧跟操作二

那么我们就有一个初始的暴力算法了,就是枚举我们最开始会进行多少次操作一后进行第一次操作二

但是这样太慢了,我们一定会有一个比\(d\)更小的上界,当达到这个上界的时候,在进行操作一一定不会更优,因为一定会有一种比上界低的操作比其更优越

我们考虑答案的组成,为\(sum+\lfloor \frac{d-i}{2}\rfloor\),其中\(sum\)是第一次操作二的贡献

所以我们只用考虑前\(2n\)天,因为如果进行更多的操作一,\(sum\)也不会超过\(n\),而我完全可以通过后面的\(\lfloor \frac{d-i}{2}\rfloor\)来贡献了

update 2024.7.10

看到了\(n\)\(2000\),可以往平方算法上面想,然而这里的上界一定是\(2n\),不能错误认为最多只会加\(n\)次,因为每一次的加法操作不一定覆盖整个序列,所以超过\(n\)次之后可能\(sum\)还会增加

posted @ 2024-02-24 15:47  最爱丁珰  阅读(3)  评论(0编辑  收藏  举报