暑假集训学习笔记(3):lxl DS Day 3
区间最值操作
CF1572F
首先广播站 \(i\), 能覆盖到的肯定是相对于 \(i\) 的前缀, 我们可以维护一个 \(r_i\), 表示每个 \(i\) 可以覆盖到的右端点, 考虑每次一操作,就是把 \(r_x\) 改为 \(g\), 然后 \(x - 1\) 以前的 \(r_i\) 就不能跨越 \(x\) 了, 这就是区间取 min 操作, 然后我们考虑segment beats 的过程, 我们会新开一个数组 \(b_i\) 表示 \(i\) 这个位置会被多少个广播站传到, 考虑 \(max\) 变为 \(v\) 时, 我们维护最大值有多少个, 然后对应的 \(b\) 数组的 \([v + 1, max]\) 位置就区间减 \(cnt_max\), \(b\) 数组要支持区间加减区间查, 再开一颗线段树即可, 然后这题就解决了。
CF793F
无修改, 可以优先考虑扫描线, 考虑扫 \(x\) 不好维护, 因为我们从 \(l + 1\) 扫到 \(l\) 的时候, 我们第一个开始的绳子会发生变化, 我们从 \(y\) 开始扫, 这样我们就只用考虑接上最后若干根绳子,我们维护 \(f_i\) 表示从 \(x == i\) 的答案, 考虑现在绳子右端点 \(r == y\) 的绳子, 如果 \(f_i \geq r\), 就都可以跑到 \(r\), 这就是将 \(i \in (1, l), a_i \geq l\) 的赋值为 \(r\), 这个可以用吉司机维护, 复杂度分析类似区间最值操作 \(O(nlogn)\)。
CF1919F2
考虑这题可以网络流, 维护最小割。
减半警报器
减半警报器, 是把多个位置的高自由度通过划分为 \(logV\) 的值域转化成低自由度。 每次把剩余空间平均分配给每个位置。
cfgym102452 I
考虑这题十分的简单, 我们把 \(y\) 平均分给三个位置, 然后单点修改, 每个位置维护一个数据结构维护剩余空间, 然后单点修改就是每个位置的数据结构全局减, 然后把小于 0 的弹出, 在重新分配给其他位置即可, 考虑一种监视器最多分配 \(logV\) 次就会清零。
P7603 [THUPC2021] 鬼街
考虑就是上一题 \(k \leq 6\) 的情况, 有个细节就是, 有可能一次修改会把同一个警报器的多个位置清零, 所以需要一个去重操作, 实际操作也很简单, 优先队列自动取最小的, 也就是优先取最后一次警报, 开个 \(vs\) 数组判断一下即可。
CF gym 104065 B
猫树分治

浙公网安备 33010602011771号