Chairman of the tree (the interval k-th largest value)

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 years = query (rc [u], rc [v], mid + 1 , r, k cnt);
    return years; 
}

 

Guess you like

Origin www.cnblogs.com/Suiyue-Li/p/11256580.html