hdu6621--主席树
K-th Closest Distance 题意:给定长度为 \(n\) 的数列,现有m次查询,每组询问给 \(l,r,p,k\) ,问对 \(l<=i<=r\) , \(|p-a[i]|\) 的第k小值。数据强制在线。 题解:二分答案ans,用主席树查询 \(a[l]\) 到 \(a[r]\) 之间 \([p-ans,p+ans]\) 的个数,个数为k即为答案。 由于强制在线,所以建主席树不能离散化。可以动态空间直接建树。 #include<bits/stdc++.h> using namespace std; const int maxn=100005; int n,m; const int N=1e6; struct node{ int ls,rs,sum; }; node tree[maxn*22]; int rt[maxn],tot=0; int update(int l,int r,int x,int pre){ int now=++tot; tree[now]=tree[pre]; if(l==r){ tree[now].sum++; return now; } int mid=(l+r)>>1; if(x>mid) tree[now].rs=update(mid+1,r,x,tree[pre].rs); else tree[now].ls=update(l