inline void build(int &k,int l,int r){ k=node_cnt++; if(l==r) return; int mid=(l+r)/2; build(lc[k],l,mid); build(rc[k],mid+1,r); } inline int modify(int k,int l,int r){ int oo=++node_cnt; lc[oo]=lc[k];rc[oo]=rc[k];sum[oo]=sum[k]+1; if(l==r) return oo; int mid=(l+r)/2; if(p<=mid) lc[oo]=modify(lc[oo],l,mid); else rc[oo]=modify(rc[oo],mid+1,r); return oo; } inline int query(int u,int v,int l,int r,int k){ int mid=(l+r)/2; int cnt=sum[lc[v]]-sum[lc[u]],ans; if(l==r) return l; if(cnt>=k) ans=query(lc[u],lc[v],l,mid,k); else ans=query(rc[u],rc[v],mid+1,r,k-cnt); return ans; }
主席树(区间第k大值)
猜你喜欢
转载自www.cnblogs.com/Suiyue-Li/p/11256580.html
今日推荐
周排行