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; }