传送门:点击打开链接
题意:太长就不粘贴了。总之是裸的块状链表。听说还可以用BST做。
代码如下:
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cstdlib>
using namespace std;
const int N=2000;
char s[10];
int T,a=1,aa,n,cnt=1;
struct node{char q[2500];int fr,nxt,siz;}t[10000];
inline void move()
{
a=t[0].nxt;
while(t[a].siz<n){n-=t[a].siz;a=t[a].nxt;}
aa=n;
}
inline void insert()
{
char ch;int b=a,bb=aa;
while(n--){
ch=getchar();while(ch<32 || ch>126) ch=getchar();
if(t[b].siz==N){
++cnt;t[cnt].fr=b;t[cnt].nxt=t[b].nxt;
t[t[b].nxt].fr=cnt;t[b].nxt=cnt;
for(int i=bb+1;i<=t[b].siz;i++){
t[cnt].q[++t[cnt].siz]=t[b].q[i];
}
t[b].siz=bb;b=cnt;bb=0;
}
for(int i=t[b].siz+1;i>bb+1;i--) t[b].q[i]=t[b].q[i-1];
++t[b].siz;t[b].q[++bb]=ch;
}
}
inline