省选模拟赛
认为只有 k 个位置有值的序列差分之后会形成 k 个颜色段,建议送回普及组重学差分与前缀和
A
考虑把硬币序列异或差分,操作变成选两个距离为 \(a_i\) 的位置翻转,
差分完序列上只有 \(2k\) 个 \(1\),对其中任意两个 \(1\) 预处理出把它们同时变为 \(0\) 的最小操作数,状压 BFS 即可。
B
对每个 \(i\) 维护 \(c_i\) 表示左端点为 \(i\),长度不超过 \(k\) 的回文串个数,修改时只需要对 \(c\) 区间推平两边暴算,
查询 \([l,r]\) 时只需要查 \(\sum\limits_{i=l}^{r-k+1}c_i\) 加上 \([r-k+2,r]\) 内的回文串个数,后者只需要暴算。随便拿个数据结构维护 \(c\) 即可。
C
肯定按 \(a\) 排序,设 \(f_{i,j}\) 表示前 \(i\) 个物品中选出 \(j\) 个的最大价值,加入 \(i\) 物品时有 \(f'_j=\max(f_j,f_{j-1}+a_i(j-1)+b_i)\)。
可以证明存在分界点 \(k\) 使得 \(f'_j=\begin{cases}f_j&j\le k\\f_{j-1}+a_i(j-1)+b_i&j>k\end{cases}\),拿个平衡树维护 \(f\) 即可,
区间加等差数列比较难写,可以不维护 \(f\) 而只维护 \(f\) 的差分。