区间维护类的小(?)DS 题。感觉我不怎么会。
题意目的明确,就是要动态维护每个区间能覆盖的范围。
看一看,感觉题目里的条件很神秘,不知道怎么用。不过可以根据特殊性质推出一个性质:存在包含关系一定先选内部。
一开始的思路是用区间互相影响计算,但这个非常复杂,且非常假。
在写暴力的时候突然意识到离散化以后只有 \(\mathcal O(n)\) 次有效修改,也就是说只需要维护修改一小段对所有位置的影响。于是可以用树套树 2log 解决。
但这实在太若只了,肯定不是这么搞,看起来也不是很能过。我们肯定要用上包含的性质。
接下来我不会了,尝试推着题解编一个 motivation:
树套树的问题在于想维护影响到的集合只能从值域出发,如果我们能从区间角度出发就比较舒服,但这要求区间排布具有成段,均摊之类的性质。
区间不包含的部分分可以带给我们启发:此时 \(l,r\) 均递增,包含 \(x\) 的区间是成段的。这个非常舒服。
考虑转化到这种情况,此时我们之前的性质开始发挥作用:只关注内部不包含其它区间的区间。
我们称关注的区间集合为 “有效区间”,未关注过的为 “候选区间”。
此时两两不包含,于是可以 \(\mathcal O(\log n)\) 维护一次修改。当我们删掉这个区间后,会有一些新的候选区间加入我们维护的集合。假设维护的区间是 \(p\),找到 “有效区间” 中 \(p\) 的前驱 \(j\),后继 \(k\),那么候选区间 \(i\) 能加入的充要条件为 \([L_i, R_i)\in (L_j, R_k)\)。我们不断找到 \(L_i>L_j\) 的区间中 \(R_i\) 最小的尝试加入即可。
最后一步感觉是套路的,但我确实不会,前面可能还能想一点吧,也许。
这个题的代码实现还是有点聪明的。一开始注意到了简洁的维护方法但写的时候又开始发电。有点难顶。
标签:候选,包含,QOJ2559,区间,维护,我们,性质 From: https://www.cnblogs.com/663B/p/18136565