Red-Blue Operations (Hard Version) 题解
现在才发现已经一个半月没写题解了。
Red-Blue Operations (Hard Version)
题目考察:二分,前缀和(极值),贪心,排序。
题目简述:
给你一个序列
数据范围:
-
1\le n,q\le 2\times 10^5 -
\forall i\in[1,n],1\le a_i\le 10^9 -
1\le k\le 10^9 显然,一个数被操作奇数次才可能被加。
注释
1 :对于\{x_{2k}\} ,\forall i\in[1,2k),x_i<x_{i+1} ,则\forall i\in[1,k],x_{2k-1}-x_{2k}<0 ,其和显然小于0 。
所以说,为了让
考虑二分答案,二分数组最小值
二分找到小于该数的的数目
注释
2 :如果我们对其做3 次操作,那么贡献为k-(k-1)+(k-2)=k-1<k 。
那么这样的话,
注释
3 :对于a_i+k-i+1 我们可以将k 提出,在一开始(排序后!排序后!排序后!)对a_i-i+1 做前缀最小值,在check函数内再将k 加回。
这时还剩
注释
4 :若所有的数都比要求的数要小(sum=n )且剩余操作数为奇数,则需要撤销一个数的操作凑成偶数,但实际无法撤销任何一个数,故无法达到要求。注释
5 :若num_i=\sum_{j=1}^ia_i+k-i+1 ,则在这些数上的操作数为2(num_{sum}-sum\times x) ,维护num_i 的方法类比注释3 。
设还剩
注释
6 :lft\le 0 ,直接判定可达到要求即可。注释
7 :若剩余一些操作(lft>0 )且无剩余数(sum=n ),则判定无法达到要求。
若
否则因为奇数加奇数为偶数,那么如果剩余两个数(
否则只剩
代码