首先这个题的 \(a_1-a_2+a_3\cdots\) 可以把偶数位的正负号反转一下,这样就变成求和了。
反转好之后记为 \(b_i=(-1)^{i-1}a_i\)。
前缀和一下。
对于每个询问三种情况:
令 \(d=\sum\limits_{i=l}^rb_i\)。
- \(d=0\),输出 \(0\)。
- \(d \bmod 2=1\)。
接下来证明一次操作必然可行。
假设 \(d\) 是正数。
记 \(c_k=\sum\limits_{i=l}^kb_i\)。
那么有 \(|c_i-c_{i-1}|=1~(l<i\le r )\)。
假设我们删掉的位置是 \(k\)。
那么新的权值就是 \(c_{k-1}-(c_r-c_k)\)。
如果 \(b_k=1\),
则要满足 \(2c_k-1=c_r=d\)。
显然当 \(b_i=1\) 时 \(c_i\) 可以取遍 \([0,d]\) 之间的整数,并且 \(d\) 是正整数,有 \(\dfrac{d+1}2\le d\)。
那么我们必然能找到一个 \(k\) 满足 \(b_k=1\), \(c_k = \dfrac{d+1}2\)。
\(d\) 是负数也是类似做法。
所以一次操作一定可行。
具体的实现方法:每个 \(c\) 的值开个桶 \(s_j\) 存 \(c_i=j\) 的 \(i\)。
然后每次查询的时候直接二分 \(\ge l\) 的最小值。
- \(d\bmod 2=0\)
这个也很简单,首先根据奇偶性,一次操作完之后权值是奇数,肯定不行。
那么先把最后一个符号删掉,然后就转换成了情况 \(2\)。
这样两次操作就做完了。
代码太丑了,挂个 CF 链接吧。