rope容器用于块状链表容器计算,基本用法跟string一样,但内部是用平衡树实现,各种操作的复杂度都是O(log n),十分简单高效。
你可以把crope换成string试试,我试过,会爆栈。
#include<iostream>
#include<cstdio>
#include<ext/rope>
#include<string>
using namespace std;
using namespace __gnu_cxx;
const int maxn=50005;
crope ro,l[maxn],tmp;
char str[205];
int main()
{
int n,op,p,cnt,c,d,v;
d=0;
cnt=1;
scanf("%d",&n);
while(n--){
scanf("%d",&op);
if(op==1){
scanf("%d%s",&p,str);
p-=d;
ro.insert(p,str);
l[cnt++]=ro;
}else if(op==2){
scanf("%d%d",&p,&c);
p-=d;c-=d;
ro.erase(p-1,c);
l[cnt++]=ro;
}else{
scanf("%d%d%d",&v,&p,&c);
v-=d;p-=d;c-=d;
tmp=l[v].substr(p-1,c);
d+=count(tmp.begin(),tmp.end(),'c');
cout<<tmp<<endl;
}
}
return 0;
}
/*
6
1 0 abcdefgh
2 4 3
3 1 2 5
3 3 3 4
1 4 xy
3 5 4 6
*/