[NOI 2003] Editor

rope大法好

//By Richard
#include <cstdio>
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <ext/rope>
#include <ctime>
#define rep(x,y,z) for (int x=(y);(x)<=(z);(x)++)
#define per(x,y,z) for (int x=(y);(x)>=(z);(x)--)
#define log2(x) (31-__builtin_clz(x))
#define mod (int)(1e9+7)
#define inf 0x3f3f3f3f
#define cls(x) memset(x,0,sizeof(x))
#ifdef DEBUG
#define debugdo(X) X
#define debugndo(X)
#define debugout(X) cout<<(#X)<<"="<<(X)<<endl
#else
#define debugdo(X)
#define debugndo(X) X
#define debugout(X)
#endif // debug
#ifdef ONLINE_JUDGE
#define debugdo(X)
#define debugndo(X)
#define debugout(X)
#endif
#define putarray(x,n) rep(iiii,1,n) printf("%d ",x[iiii])
#define mp make_pair
using namespace std;
typedef pair<int,int> pairs;
typedef long long LL;
/read4.0
template <typename T>
inline void read(T &x)
{
	char ch;x=0;
	bool flag=false;
	ch=getchar();
	while (ch>'9'||ch<'0') 
	{
		if (ch=='-') flag=true;
		ch=getchar();
	}
	while ((ch<='9'&&ch>='0'))
	{
		x=x*10+ch-'0';
		ch=getchar();
	}
	if (flag) x*=-1;
}
template <typename T>
inline void read(T &x,T &y){read(x);read(y);}
template <typename T>
inline void read(T &x,T &y,T &z){read(x);read(y);read(z);}
/graph///
#ifdef graphv
const int maxn=,maxm=;
struct GRAPH
{
	int next[maxm],first[maxn],to[maxm],value[maxm],cnt;
	void addedge(int x,int y,int z){next[++cnt]=first[x];first[x]=cnt;to[cnt]=y;value[cnt]=z;}
	void addedge2(int x,int y,int z){addedge(x,y,z);addedge(y,x,z);}
	void addedge2(int x,int y,int z,int xx){addedge(x,y,z);addedge(y,x,xx);}
};
#endif
#ifdef graphnv
const int maxn=,maxm=;
struct GRAPH
{
	int next[maxm],first[maxn],to[maxm],cnt;
	void addedge(int x,int y){next[++cnt]=first[x];first[x]=cnt;to[cnt]=y;}
	void addedge2(int x,int y){addedge(x,y);addedge(y,x);}
};
#endif
/variables&functions
using namespace __gnu_cxx;
crope cr;
int t,now,x;
char s[3333333],ch;
int main()
{
	read(t);
	while (t--)
	{
		ch=getchar();
		while (ch=='\n') ch=getchar();
		switch (ch)
		{
			case 'M':read(now);break;
			case 'P':now--;while(ch!='\n')ch=getchar();break;
			case 'N':now++;while(ch!='\n')ch=getchar();break;
			case 'I':
				read(x);
				rep(i,0,x-1) 
				{
					s[i]=getchar();
					if (s[i]=='\n') i--;
				}
				s[x]=0;
				cr.insert(now,s);
				getchar();
				break;
			case 'D':read(x);cr.erase(now,x);break;
			case 'G':read(x);cr.copy(now,x,s);s[x]=0;puts(s);break;
			puts("-1");
		}
	}
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值