[LibreOJ β Round #2]数学上来先打表
数学上来先打表
题解
我们很容易发现,这种构成连通块的查询元素的题很容易用带权并查集来处理。
由于它第三个操作求的是块中第k小的数,如果一个一个查询肯定不好处理,我们需要一种更加高效的查询方式。
于是,我们就想到了分块,将每个点的导值分块,查询时跳着查,到第k所在的那个块时再一个一个查,这样就可以地进行查询了。
而第二个操作要求对这个进行可持久化。我们发现我们对刚做的一个链接操作进行撤回是十分容易的,于是我们可以把所有的操作建成一棵树,如果是返回操作就接在它返回的操作的点上,否则就接在上一个操作上,我们执行时只需要查询遍历这棵树就可以了。
然后我们便可以用的时间复杂度解决这道题了。
虽说这时间复杂度很丑。
源码
#include<cstdio>
#include<cmath>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<vector>
#include

浙公网安备 33010602011771号