两个操作 , 插入一个字符到第p 个位置前面跟 查询第p个位置是什么字符。。
//tpl
//ipqhjjybj_tpl.h
//header.h
#include <cstdio>
#include <cstdlib>
#include <map>
#include <set>
#include <algorithm>
#include <cstring>
#include <iostream>
#include <vector>
#include <string>
#include <queue>
#include <math.h>
#define mp(x,y) make_pair(x,y)
#define pii pair<int,int>
#define pLL pair<long long ,long long>
#define pb(x) push_back(x)
#define rep(i,j,k) for(int i = j; i < k;i++)
#define MAX(x,a) x=((x)<(a))?(a):(x);
#define MIN(x,a) x=((x)>(a))?(a):(x);
using namespace std;
const int INF = 0x3f3f3f3f;
const int N = 1111111;
vector<char> vec[2500];
int n,m;
int q;
char s[N];
char ts[10];
void insert(char c,int l){
int sz = 0,i;
for(i=0; ; i++){
if(sz + vec[i].size() >= l)
break;
else sz += vec[i].size();
// printf("ss fuck i=%d\n",i);
}
vec[i].insert(vec[i].begin()+l-sz,c);
}
char get(int l){
int sz = 0 , i ;
for(i = 0; ;i++){
if(sz + vec[i].size() > l)
break;
else sz+=vec[i].size();
// printf("fuck i=%d\n" ,i );
}
return vec[i][l-sz];
}
int main(){
scanf("%s",s);
scanf("%d",&q);
m = 1100;
rep(i,0,m+3)
vec[i].reserve(m+5);
for(int i = 0;s[i];i++){
vec[i/m].pb(s[i]);
}
while(q--){
int l;
scanf("%s",ts);
if(ts[0] == 'Q'){
scanf("%d",&l);
l--;
printf("%c\n",get(l));
}else{
scanf("%s %d",ts,&l);
l--;
insert(ts[0],l);
}
}
return 0;
}