和 CSP-2024 T3 染色线段树做法本质一样。
考虑固定每个位置的次数后我的总操作次数只和相邻对有关(就是经典铺设道路结论),那么,记录 \(f_{i, j}\) 为到了 \(i\) 操作了 \(j\) 次的方案数,考虑到对于每个 \(j\) 都可以让 \(i + 1\) 顺承 \(i\) 的次数做到没有贡献,除非有两种情况:
- \(b_i > 0\) 且我想要拿走这个贡献,则次数更改为 \(a_i\)。
- \(b_i < 0\) 且我不想拿走这个贡献,则次数更改为 \(a_i - 1\)。
注意到 \(f_i\) 与 \(f_{i + 1}\) 只更改了常数个位置,利用线段树维护 \(j\) 那一维,简单的改一下查询一下即可。