#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<string>
#include<cstdio>
#include<queue>
#include<cmath>
#define N 1000010
#define M 2005
using namespace std;
class ListTable{
public:
char ch[N];
int sum[N];
int num;
int n,m;
struct ListBlock{
int size;
char data[M];
void push_back(char c){
size++;
data[size]=c;
}
void insert(int pos,char c){
for(int i=size+1;i>pos;i--)
data[i]=data[i-1];
data[pos]=c;
size ++;
}
char getData(int pos){
return data[pos];
}
};
ListBlock block[M];
void maintain(){
for(int i=1;i<=num;i++)
sum[i]=sum[i-1]+block[i].size;
}
void init(){
num=sqrt((n+m)*1.0)+1;
for(int i=0;i<n;i++)
block[i/num+1].push_back(ch[i]);
maintain();
}
char query(int pos,int number){
return block[number].getData(pos);
}
void insert(int pos,int number,char c){
block[number].insert(pos,c);
}
char Query(int pos){
int p=lower_bound(sum+1,sum+1+num,pos)-sum;
return query(pos-sum[p-1],p);
}
void Insert(char c,int pos){
int p=lower_bound(sum+1,sum+1+num,pos)-sum;
insert(pos-sum[p-1] ,p,c);
maintain();
}
}f;
int main(){
scanf("%s",f.ch);
f.n=strlen(f.ch);
scanf("%d",&f.m);
f.init();
char s[3];
char c[3];
int p;
for(int i=0;i<f.m;i++){
scanf("%s",s);
if(s[0]=='Q'){
scanf("%d",&p);
printf("%c\n",f.Query(p));
}
else{
scanf("%s%d",c,&p);
f.Insert(c[0],p);
}
}
return 0;
}
时间: 2024-10-20 14:24:25