WA #9#10求条
查看原帖
WA #9#10求条
1037614
__crz_qaq__楼主2024/8/20 16:06
#include<bits/stdc++.h>
using namespace std;
const int N=3e5+5;
int a[N],b[N];
int root[N],tot;
int sz[N*20],ls[N*20],rs[N*20];
int copy(int p)
{
	++tot;
	sz[tot]=sz[p];
	ls[tot]=ls[p];
	rs[tot]=rs[p];
	return tot;
}
int build(int pl,int pr)
{
	int p=++tot;
	if(pl==pr)
		return p;
	int mid=(pl+pr)>>1;
	ls[p]=build(pl,mid);
	rs[p]=build(mid+1,pr);
	return p;
}
int update(int p,int pl,int pr,int x)
{
	p=copy(p);
	++sz[p];
	if(pl==pr)
		return p;
	int mid=(pl+pr)>>1;
	if(x<=mid)
		ls[p]=update(ls[p],pl,mid,x);
	else
		rs[p]=update(rs[p],mid+1,pr,x);
	return p;
}
int query(int u,int v,int pl,int pr,int k)
{
	if(pl==pr)
		return pl;
	int x=sz[ls[v]]-sz[ls[u]],mid=(pl+pr)>>1;
	if(k<=x)
		return query(ls[u],ls[v],pl,mid,k);
	return query(rs[u],rs[v],mid+1,pr,k-x);
}
signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=n;++i)
		cin>>a[i],b[i]=a[i];
	sort(b+1,b+n+1);
	int K=unique(b+1,b+n+1)-b-1;
	for(int i=1;i<=n;++i)
		a[i]=lower_bound(b+1,b+K+1,a[i])-b;
	root[0]=build(0,K);
	for(int i=1;i<=n;++i)
		root[i]=update(root[i-1],0,K,a[i]);
	while(m--)
	{
		int l,r,k;
		cin>>l>>r>>k;
		cout<<b[query(root[l-1],root[r],0,K,k)]<<'\n';
	}
}
2024/8/20 16:06
加载中...