0pts蒟蒻求职
查看原帖
0pts蒟蒻求职
229919
一E孤行楼主2021/7/3 10:43
#include<cstdio>
#include<vector>
#include<algorithm>
#include<cstdlib>
#include<iostream>
#include<cstring>
using namespace std;
const int maxn=2e5+5;
int n,m,a[maxn];
vector<int> v;
int cnt,root[maxn];
int getid(int x)
{
	return lower_bound(v.begin(),v.end(),x)-v.begin()+1;
}
struct aaa{
	int l,r,sum;
}t[maxn*40];
void insert(int l,int r,int pre,int &now,int p)
{
	t[++cnt]=t[pre];
	now=cnt;
	t[now].sum++;
	if(l==r)
	   return;
	int mid=(l+r)>>1;
	if(p<=mid)
	   insert(l,mid,t[pre].l,t[now].l,p);
	else
	   insert(mid+1,r,t[pre].r,t[now].r,p);
}
int query(int l,int r,int L,int R,int k)
{
	if(l==r)
	   return l;
	int mid=(l+r)>>1;
	int tmp=t[t[R].l].sum-t[t[L].l].sum;
	if(k<=tmp)
	   return query(l,mid,t[L].l,t[R].l,k);
	else
	   return query(mid+1,r,t[L].r,t[R].r,k-tmp);
}
char cc[1000000];
int cao;
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		char c,c1;
		int x;
		cin>>c;
		if(c=='T')
		{
			cin>>c1;
			cao++;
			insert(1,26,root[cao-1],root[cao],c1-'a');
		}
		if(c=='U')
		{
			cin>>x;
			cao++;
			cnt++;
			root[cao]=root[cao-x-1];
			t[cnt].l=t[root[cao-x-1]].l;
			t[cnt].r=t[root[cao-x-1]].r;
			t[cnt].sum=t[root[cao-x-1]].sum;
			cc[cao]=cc[cao-x-1];
		}
		if(c=='Q')
		{
			cin>>x;
			printf("%c\n",query(1,26,root[0],root[cao],x)+'a');
		}
	}
	return 0;
}
2021/7/3 10:43
加载中...