【NOI2003】文本编辑器-块状链表

传送门:点击打开链接

题意:太长就不粘贴了。总之是裸的块状链表。听说还可以用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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值