CF1039E Summer Oenothera Exhibition
题意:给定一个长度为
允许离线,
首先不难针对单组询问想到暴力:每次贪心划分,能不分就不分。正确性较为显然。
似乎难以得出更强的性质,考虑优化这个过程。
设
这样,若在
这些边会新成一棵树,不难想到使用
接下来,将询问离线,按极差约束从小到大来回答。
显然
考虑根号分治。
若
由于
这样会形成森林而非单棵树,可以发现,由于超过
我们利用
接下来,就是
这里使用
总复杂度
实现细节:
的 次变化如何找到。 每次
变化后,二分出下一次变化所需的极差,然后用 std::vector
来分配给每个询问。怎么用
每次跳过一棵树。 中编号大的点总是为父亲,这样 access 一下就得到我们想要的路径了。