您的位置:首页 > 其它

[NOI 2003] Editor

2017-09-06 19:57 246 查看
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: