题目链接
做法
考虑对询问分块,选择块大小为 $ S $ ,每次对块内的操作进行处理。因此对于之前的修改可以预处理出来。
对于块内询问,将所有没有在这个块内修改的边按权值大到小排序,将询问按权值大到小排序,然后用两个指针维护。若此时指向边权大于询问的权值,则加入一条边;否则询问。
考虑加入可能被修改的边。按照时间将边进行修改,然后将边权权不小于询问权值的边加入,在进行询问。这部分可以暴力进行。考虑做完后需要撤销操作,所以需要用按秩合并的并查集。
这样询问的复杂度为 $ O(S^3 \log n + m \log n) $ 。
考虑对边修改后进行排序。暴力排序时间复杂度 $ O(n \sqrt{n} \log n) $ ,而分类后归并排序时间复杂度 $ O(n \sqrt{n \log n}) $ ,此时 $ S = \sqrt{n \log n} $ 最优。
1 |
|