数星星题解补充

题解中那个看似暴力的染色,实际上正确性显然,直接看75%的时间复杂度证明

然后还是直接看75分的部分

它的里面说是用set维护块的前驱后继,然后全网没有一篇这样的题解,似乎全世界就我一个用这个方法

于是想了一中午终于想到如何维护:

就是用set记录每一个块的最后一个的位置,由于是区间覆盖,不会有重叠的块

然后考虑如何覆盖,分两种情况:

1.l,r在同一块内

就是用lower_bound找后继(原来是这个意思),然后对(l,r)暴力清除

2.else

然后就是处理中间的整块,直接清除

注意前后还会有一点小部分,可以不用管后面(从set维护什么来思考),只用维护前面,只要l-1还在块内就新建一个块

然后还是题解中的树剖+set+树状数组,或者可以用线段树的奇怪操作

不过好像理论时间复杂度快一点nlog ^2,线段树的是nlog ^3.

不过我调了一天,孤身一人...

posted @ 2024-02-22 20:50  zhy_learn  阅读(29)  评论(0)    收藏  举报