2025.03.05
- P5906 【模板】回滚莫队&不删除莫队
学习了一下回滚莫队。考虑离线,将询问 \(l, r\) 塞到 \(l\) 所在块中,然后对于一个块中的询问按照 \(r\) 排序,块内部分暴力算,块外部分直接移动指针。移动总次数为 \(O(n \sqrt n)\)。
2025.03.06
- P3863 序列
考虑扫描线扫序列,分块维护时间,操作是区间加,区间求一个数 rank。
- P5386 [Cnoi2019] 数字游戏
加入容易删除困难,考虑回滚莫队。转化为 \(x \le a_p \le y\) 的位置 \(p\) 为 \(1\),有多少个子区间中的值全为 \(1\)。
一段连续的 \(1\) 贡献为 \(\frac{len(len + 1)}{2}\)。将询问的 \((x, y)\) 看做区间,插入相当于 merge 两段连续的 \(1\)。只需维护每一个块左侧 / 右侧连续的 \(1\) 长度,每个位置左边 / 右边最远通过连续 \(1\) 能延伸到那些位置即可。
计算答案时容易的,散块暴力,整块扫一遍记录当前 \(len\) 即可。复杂度 \(O(n \sqrt n)\)。
2025.03.07
- P5072 [Ynoi Easy Round 2015] 盼君勿忘
莫队。值 \(x\) 的贡献是 \(x(2^{len} - 2^{cnt_x})\)。如果模数是固定的是简单的。但每个询问的模数是变化的。考虑如果两个值的出现次数相同,他们的系数是相同的。而区间本质不同的出现次数数量是 \(O(\sqrt {len})\) 级别的。所以只需存下出现的出现次数以及其值之和即可计算。为了去掉快速幂的 \(\log\) 可以使用 \(O(\sqrt n) - O(1)\) 光速幂。复杂度 \(O(n \sqrt n)\)。
- P8734 [蓝桥杯 2020 国 A] 奇偶覆盖
首先空白的也是偶数,比较烦,转化为总面积减去奇数。维护奇数面积打翻转 tag 即可。
- P5816 [CQOI2010] 内部白点
显然会在一轮后结束。答案即为 \(n\) 加上横线和竖线的交点个数。扫描线维护即可。
2025.03.08
- P9990 [Ynoi Easy Round 2023] TEST_90
将 \(r\) 扫描线,修改是 \([pre_r + 1, r]\) 翻转奇偶性,查询是历史和。矩阵维护即可。懒得卡常了。
2025.03.09
- P9991 [Ynoi Easy Round 2023] TEST_107
分三种情况讨论,扫描线即可。
- P5524 [Ynoi2012] NOIP2015 充满了希望
先扫一遍操作,对于每个位置 \(i\) 维护他最后一次被覆盖的时间 \(t_i\)。询问考虑扫描线,扫到一个操作 3 \(x\) 将 \(t_x\) 加上对应的数值,代表第 \(t_x\) 次操产生了贡献。后缀和维护。
- 51Nod-1559 车和矩形
简单扫描线。一个矩形被覆盖的条件是每一行都有车且每一列都有车。扫描线扫 \(y\),线段树维护每个横坐标上的车的纵坐标最大值,区间查询最小值是否在矩形下界之上即可。