随笔分类 - 数据结构-主席树
摘要:"题目链接" 思维难度0 实现难度7 建出主席树后用两点的状态减去lca和lca父亲的状态,然后在新树上跑第$k$小 cpp include include include using namespace std; const int MAXN = 100010; const int MAXM =
阅读全文
摘要:"题目链接" 容易发现,可能答案只有$0$、每个数,每个数$+1$ 于是把这$2n+1$个数建立一个权值线段树,可持久化一下,每个节点记录这个子树中最后加入数加入的时间的最小值$latest$(好好理解一下)。 对于查询$(l,r)$,线段树上二分找到最小的$latest include inclu
阅读全文
摘要:"题目链接" 被自己的sb错误调到自闭。。 主席树的进阶应用。 把$P_i$离散化一下,得到每个$P_i$的排名,然后建一棵维护$m$个位置的主席树,每个结点记录区间总和和正在进行的任务数。 差分一下,主席树维护前缀和,每个时刻一个$root$。 然后就是线段树里查前$k$小了。 cpp inclu
阅读全文
摘要:"题目链接" 容易发现$a,b,c$肯定是在一条直链上的。 定义$size(u)$表示以$u$为根的子树大小(不包括$u$) 分两种情况, 1、$b$是$a$的祖先,对答案的贡献是 $$min(deep(p) 1,k) size(p)$$ 显然是可以直接算的。 2、$b$是$a$的孩子,对答案的贡献
阅读全文
摘要:"题目链接" 主席树=可持久化权值线段树。 如果你不会可持久化线段树,请 "右转" 如果你不会权值线段树,请自行脑补,就是线段树维护值域里有多少个数出现。 可持久化线段树是支持查询历史版本的。 我们对每个数都进行一次基于上个版本的单点修改操作,这样每个版本就是维护的前$p$个数,这个权值显然满足可减
阅读全文


浙公网安备 33010602011771号