省选模拟赛

认为只有 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\) 的差分。

posted @ 2024-10-14 18:57  5k_sync_closer  阅读(60)  评论(2编辑  收藏  举报