社区讨论

萌新刚学OI 1msP3834WA+RE求助0pt

灌水区参与者 6已保存回复 19

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
15 条
当前快照
1 份
快照标识符
@m01wiczi
此快照首次捕获于
2024/08/20 12:04
2 年前
此快照最后确认于
2024/08/20 12:42
2 年前
查看原帖
rt
CPP
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+5;
int root[N],a[N],b[N],c[N];
int sz[N<<5],lt[N<<5],rt[N<<5];
int tot;
int copy(int x)
{
	++tot;
	sz[tot]=sz[x];
	lt[tot]=lt[x];
	rt[tot]=rt[x];
	return tot;
}
int build(int pl,int pr)
{
	int p=++tot;
	if(pl==pr)
		return p;
	int mid=(pl+pr)>>1;
	lt[p]=build(lt[p],pl,mid);
	rt[p]=build(rt[p],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;
	lt[p]=update(lt[p],pl,mid,x);
	rt[p]=update(rt[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 mid=(pl+pr)>>1,x=sz[lt[v]]-sz[lt[u]];
	if(k<=x)
		return query(lt[u],lt[v],pl,mid,k);
	return query(rt[u],rt[v],mid+1,pr,k-x);
}
signed main()
{
	ios::sync_with_stdio(0);
	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(1,1,K);
	for(int i=1;i<=n;++i)
		root[i]=update(root[i-1],1,K,a[i]);
	while(m--)
	{
		int l,r,k;
		cin>>l>>r>>k;
		cout<<b[query(root[l-1],root[r],1,K,k)]<<'\n';
	}
}

回复

19 条回复,欢迎继续交流。

正在加载回复...