MnZn刚学OI,20pts求助(AC#1#2),玄关
查看原帖
MnZn刚学OI,20pts求助(AC#1#2),玄关
169594
Heart_Of_Iron_4楼主2024/7/31 11:17
#include<bits/stdc++.h>//5656430
using namespace std;
#define int long long
#define mid ((l+r)/2)
struct node
{
	int lc,rc,num;
}a[11451419];
int n,m,t1,t2,t3,b[114514],root[114514],len;
int lsh[114514];//离散化
unordered_map<int,int> lshm;//离散化
void push_up(int k)
{
	a[k].num=a[a[k].lc].num+a[a[k].rc].num;
}
void build(int k,int dyk,int l,int r,int q)
{
	//printf("%lld %lld %lld %lld %lld %lld\n",k,dyk,l,r,q,len);
	if(r<l)return;
	if(l==r)
	{
		a[k].num+=1;
		return;
	}
	if(q<=mid)
	{
		a[k].rc=a[dyk].rc;
		a[k].lc=++len;
		build(a[k].lc,a[dyk].lc,l,mid,q);
		push_up(k);
	}
	else
	{
		a[k].lc=a[dyk].lc;
		a[k].rc=++len;
		build(a[k].rc,a[dyk].rc,mid+1,r,q);
		push_up(k);
	}
}
int qwery(int k,int dyk,int l,int r,int q)
{
	if(l==r)return l;
	if(q<=a[a[k].lc].num-a[a[dyk].lc].num)
	{
		return qwery(a[k].lc,a[dyk].lc,l,mid,q);
	}
	else
	{
		return qwery(a[k].rc,a[dyk].rc,mid+1,r,q-(a[a[k].lc].num-a[a[dyk].lc].num));
	}
}
signed main()
{
	scanf("%lld%lld",&n,&m);
	for(int i=1;i<=n;++i)
	{
		scanf("%lld",&t1);
		lsh[i]=t1;
		b[i]=t1;
	}
	sort(lsh+1,lsh+1+n);
	for(int i=1;i<=n;++i)
	{
		lshm[lsh[i]]=i;
	}
	for(int i=1;i<=n;++i)
	{
		root[i]=++len;
		// printf("%lld %lld\n",i,lshm[b[i]]);
		build(root[i],root[i-1],1,n,lshm[b[i]]);
	}
	for(int i=1;i<=m;++i)
	{
		scanf("%lld%lld%lld",&t1,&t2,&t3);
		printf("%lld\n",lsh[qwery(root[t2],root[t1-1],1,n,t3)]);
	}
	/* for(int i=1;i<=len;++i)
{
	printf("%lld:%lld %lld %lld\n",i,a[i].num,a[i].lc,a[i].rc);
	}
	for(int i=1;i<=n;++i)
{
	printf("%lld:%lld\n",i,root[i]);
	}*/
	return 0;
}
2024/7/31 11:17
加载中...