K 分块是什么?
题解区莫名都使用了线段树优化建图,只有一个人是并查集优化建图,复杂度普遍是 log 平方。
但事实上本题可以容易的做到单 log(二分的 log)。就是使用标题中的科技:K 分块。
其实根本不算科技。非常简单的小技巧。
想必各位还记得 ABC456F 吧?那个题需要维护滑动窗口中不可差分的值(区间
可以使用非删尺取去掉线段树的 log。具体见下文:
https://litjohn.pages.dev/posts/2-pointers-with-no-deletion/
另一种做法就是 K 分块:把序列按照
看上去没啥用,完全比不上非删尺取。但是在本题中作用就体现出来了:K 分块能够优化建图。
具体的,对于每个块,我们设置一系列节点代表这个块长度为
然后就是比较套路的建图和 2-SAT 了。题解区已经讲的很明白。
放一下我的提交记录。