我们先考虑不带修怎么做,显然考虑维护一个指针排序后从左往右扫。如果当前指针如果还是 \(\leq a_i\),则 \(x\leftarrow x+1\),答案加上 \(a_i-x\)。那么我们发现,答案只跟有过修改的有关,于是分别记两个集合 \(S,T\) 表示是否出现在这个集合中。带修如果加数会发现会会影响整个后面的状态。那么考虑时空倒流减数。那么我们发现如果 \(a_i\in T\),那么相当于没有变化,只从 \(T\) 中删去 \(a_i\) 即可,且因为 \(T\) 中元素本身就没有贡献,于是答案也没有变化。那么之后考虑 \(a_i\in S\)。那么我们发现我们必须选择一个 \(\geq a_i\) 的元素来尽可能替代,否则答案就不对了,且一定是最小的在 \(T\) 中的。那么如果存在我们把它放入 \(S\),那么由于它一定是至少小于等于下一个元素的,所以指针不会发生改变,但答案又额外多了一个新的元素。但如果 \(T\) 中不存在这个元素,那么指针很遗憾的只能少一个了,答案就要把这个补回来。