Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //#pragma comment(linker, "/STACK:16777216")
- #include <fstream>
- #include <iostream>
- #include <string>
- #include <math.h>
- #include <set>
- #include <vector>
- #include <map>
- #include <queue>
- #include <stdio.h>
- #include <stack>
- #include <algorithm>
- #include <list>
- #include <memory.h>
- #define y0 sdkfaslhagaklsldk
- #define y1 aasdfasdfasdf
- #define yn askfhwqriuperikldjk
- #define j1 assdgsdgasghsf
- #define tm sdfjahlfasfh
- #define INF 100000000
- #define eps 1e-11
- #define M_PI 3.141592653589793
- //#define mx 1000000000000ll
- #define bs 1000000007
- //#define free asdfasdfsdadsg
- //#define szz 400
- //#define pb push_back
- #define MAXN 100000
- #define free afdshjioey
- //#define SIZE 60
- using namespace std;
- long it[1000],n,beg,endd,sizee;
- long l[300000],r[300000],iter[1000];
- string st,st1;
- char c[300000];
- long a,b,ps;
- char gch(long ps)
- {long block=ps/400;
- long mv=ps%400;
- long q=it[block];
- for (int j=0;j<mv;j++)
- q=r[q];
- return c[q];
- }
- void add_c(char ch,long ps)
- {
- sizee++;
- c[sizee]=ch;
- if (ps==0){l[sizee]=0;r[sizee]=it[0];l[it[0]]=sizee;
- it[0]=sizee;}
- else{
- --ps;
- long block=ps/400;
- long mv=ps%400;
- long q=it[block];
- // cout<<q<<endl;
- for (int j=0;j<mv;j++)
- q=r[q];
- // cout<<q<<endl;
- l[sizee]=q;
- r[sizee]=r[l[sizee]];
- l[r[q]]=sizee;
- r[q]=sizee;
- }
- for (int bl=0;bl<=505;bl++)
- if (bl*400>ps)
- {
- it[bl]=l[it[bl]];
- }
- if (sizee%400==1)
- {
- long qq=it[sizee/400-1];
- for (int j=1;j<=400;j++)
- qq=r[qq];
- it[sizee/400]=qq;
- }
- // for (int i=1;i<=sizee;i++)
- // cout<<i<<" "<<l[i]<<" "<<r[i]<<" "<<c[i]<<" ";
- //cout<<endl;
- }
- int main(){
- //freopen("bees.in","r",stdin);
- //freopen("bees.out","w",stdout);
- //freopen("C:/input.txt","r",stdin);
- //freopen("C:/output.txt","w",stdout);
- ios_base::sync_with_stdio(0);
- cin>>st;
- n=st.size();
- l[1]=r[1]=0;
- sizee=1;
- c[1]=st[0];
- it[0]=1;
- for (int i=1;i<n;i++)
- {
- add_c(st[i],i);
- }
- //for (int i=1;i<=n;i++)
- //cout<<l[i]<<" "<<r[i]<<" "<<c[i]<<endl;
- while (cin>>st)
- {
- if (st=="END")break;
- else if (st=="P")
- {
- cin>>a>>b;
- for (int i=a;i<=b;i++)
- cout<<gch(i);
- cout<<endl;
- }
- else
- {
- cin>>st1;
- cin>>ps;
- for (int i=0;i<st1.size();i++)
- add_c(st1[i],ps+i);
- }
- }
- cin.get();cin.get();
- return 0;}
Advertisement
Add Comment
Please, Sign In to add comment