可持久化数据结构板子整理(可持久化 线段树/字典树/可并堆)
静态序列查区间第k大 int update(int x,int l,int r,int k){ int rt=++cnt; sum[rt]=sum[x]+1; L[rt]=L[x]; R[rt]=R[x]; if(l<r){ if(k<=mid){ L[rt]=update(L[rt],l,mid,k); }else{ R[rt]=update(R[rt],mid+1,r,k); } } return rt; } int query(int xl,int xr,int l,int r,int k){ if(l==r)return l; int x=sum[L[xr]]-sum[L[xl]]; if(x>=k){ return query(L[xl],L[xr],l,mid,k); }else{ return query(R[xl],R[xr],mid+1,r,k-x); } } 可持久化字典树 struct trie{ int ch[2],siz,id; }t[50000010]; void insert(int &now,int pre,int bit,long long val){ now=++cnt; t[now]=t[pre]; t[now].siz++; if(bit==-1){ return; } int i=(val>>bit)&1; insert(t[now].ch