wa了3个点,不清楚为什么,求调
查看原帖
wa了3个点,不清楚为什么,求调
507319
tzd__emmm楼主2022/7/25 11:47
```#include<bits/stdc++.h>
using namespace std;
const int N=1e5*2+10;
int a[N],pos,root[N],ls[N];
struct Node{
	int l,r,v;
}ns[40*N];
void edit(int l,int r,int old,int &now,int x)
{
	now=++pos;
	ns[now]=ns[old];
	ns[now].v++;
	if(l==r)
	{
		return;
	}
	int mid=(l+r)/2;
	if(x<=mid)
	{
		edit(l,mid,ns[old].l,ns[now].l,x);
	}
	else
	   edit(mid+1,r,ns[old].r,ns[now].r,x);
}
int find_k(int l,int r,int old, int now,int k)
{
	if(l==r)
	{
		return l;
	}
	int mid=(l+r)/2;
	int left=ns[ns[now].l].v-ns[ns[old].l].v;
	if(k<=left)
	{
		return find_k(l,mid,ns[old].l,ns[now].l,k);
	}
	else
	  return find_k(mid+1,r,ns[old].r,ns[now].r,k-left);
}
int main()
{
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		ls[i]=a[i];
	}
	sort(ls+1,ls+n+1);
	int sz=unique(ls+1,ls+n+1)-ls-1;
	for(int i=1;i<=n;i++)
	{
		edit(1,sz,root[i-1],root[i],lower_bound(ls+1,ls+n+1,a[i])-ls);
	}
	for(int i=1;i<=m;i++)
	{
		int l,r,k;
		cin>>l>>r>>k;
		cout<<ls[find_k(1,sz,root[l-1],root[r],k)]<<endl;
	}
	return 0;
}
2022/7/25 11:47
加载中...