求助,全部RE了,本机和ide都是正常的。
查看原帖
求助,全部RE了,本机和ide都是正常的。
130104
loris楼主2021/9/6 15:16

#include<bits/stdc++.h>
#define mid (l+r)/2
#define MM 100010
#define LOG 10
using namespace std;
int x,y,z,t[MM],L[MM*LOG],R[MM*LOG],sum[MM*LOG],a[MM],b[MM],n,m,q,tot;
int build(int l,int r)
{
	int rt=++tot;
	if(l<r)
	{
		L[rt]=build(1,mid);
		R[rt]=build(mid+1,r);
	}
	return rt;
}
int updata(int pre,int l,int r,int x)
{
	int rt=++tot;
	L[rt]=L[pre],R[rt]=R[pre],sum[rt]=sum[pre]+1;
	if(r>l)
	{
		if(x<=mid)
			L[rt]=updata(L[pre],l,mid,x);
		else	
			R[rt]=updata(R[pre],mid+1,r,x); 
	}
	return rt;
}
int query(int rt1,int rt2,int l,int r,int k)
{
	if(l==r)return l;
	int x=sum[L[rt2]]-sum[L[rt1]];
	if(x>=k)return query(L[rt1],L[rt2],l,mid,k);
	else query(R[rt1],R[rt2],mid+1,r,k-x);
}
int main()
{
	cin>>n>>q;
	for(int i=1;i<=n;i++)
		cin>>a[i],b[i]=a[i];
	sort(b+1,b+n+1);
	m=unique(b+1,b+n+1)-b-1;
	t[0]=build(1,m);
	for(int i=1;i<=n;i++)
	{
		a[i]=lower_bound(b+1,b+m+1,a[i])-b;
		t[i]=updata(t[i-1],1,m,a[i]);
	} 
	while(q--)
	{
		cin>>x>>y>>z;
		cout<<b[query(t[x-1],t[y],1,m,z)]<<endl;
	}
	return 0;
}


2021/9/6 15:16
加载中...