http://poj.org/problem?id=1523
vector真是个好东西
可以非常方便地实现块状链表
#include<cstdio> #include<vector> #include<math.h> #include<cstring> #include<iostream> #define FOR(i,s,t) for(register int i=s;i<=t;++i) const int N=1000011; std::vector<char>v[1011]; char S[N],Q[5],A[5]; int len,blo,t,k,las,n; int main(){ gets(S+1); len=strlen(S+1); blo=(int)(sqrt(1.00*len)); FOR(i,1,len)v[(i-1)/blo+1].push_back(S[i]); v[(len-1)/blo+1].push_back('a'); scanf("%d",&n); FOR(i,1,n){ scanf("%s",Q); if(Q[0]=='Q'){ scanf("%d",&k);--k; for(t=1;k>=v[t].size();++t)k-=v[t].size(); printf("%c ",v[t][k]); } else{ scanf("%s%d",A,&k);--k; for(t=1;k>=v[t].size();++t)k-=v[t].size(); v[t].insert(v[t].begin()+k,A[0]); } } return 0; }