Guest User

Untitled

a guest
Apr 8th, 2013
365
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.55 KB | None | 0 0
  1. //#pragma comment(linker, "/STACK:16777216")
  2. #include <fstream>
  3. #include <iostream>
  4. #include <string>
  5. #include <math.h>
  6. #include <set>
  7. #include <vector>
  8. #include <map>
  9. #include <queue>
  10. #include <stdio.h>
  11. #include <stack>
  12. #include <algorithm>
  13. #include <list>
  14. #include <memory.h>
  15.  
  16. #define y0 sdkfaslhagaklsldk
  17. #define y1 aasdfasdfasdf
  18. #define yn askfhwqriuperikldjk
  19. #define j1 assdgsdgasghsf
  20. #define tm sdfjahlfasfh
  21.  
  22. #define  INF 100000000
  23. #define eps 1e-11
  24. #define M_PI 3.141592653589793
  25. //#define mx 1000000000000ll
  26. #define bs 1000000007
  27. //#define free asdfasdfsdadsg
  28. //#define szz 400
  29. //#define pb push_back
  30. #define MAXN 100000
  31. #define free afdshjioey
  32. //#define SIZE 60
  33.  
  34. using namespace std;
  35.  
  36. long it[1000],n,beg,endd,sizee;
  37. long l[300000],r[300000],iter[1000];
  38. string st,st1;
  39. char c[300000];
  40. long a,b,ps;
  41.  
  42. char gch(long ps)
  43. {long block=ps/400;
  44.  long mv=ps%400;
  45.  long q=it[block];
  46.  for (int j=0;j<mv;j++)
  47.  q=r[q];
  48.  return c[q];
  49. }
  50.  
  51. void add_c(char ch,long ps)
  52. {
  53.      sizee++;
  54.      c[sizee]=ch;
  55.      
  56.      if (ps==0){l[sizee]=0;r[sizee]=it[0];l[it[0]]=sizee;
  57.      it[0]=sizee;}
  58.      
  59.      else{
  60.      --ps;    
  61.      long block=ps/400;
  62.      long mv=ps%400;
  63.      long q=it[block];
  64.     // cout<<q<<endl;
  65.      for (int j=0;j<mv;j++)
  66.      q=r[q];
  67.     // cout<<q<<endl;
  68.      
  69.      l[sizee]=q;
  70.      r[sizee]=r[l[sizee]];
  71.      l[r[q]]=sizee;
  72.      r[q]=sizee;
  73.      }
  74.      
  75.      for (int bl=0;bl<=505;bl++)
  76.      if (bl*400>ps)
  77.      {
  78.       it[bl]=l[it[bl]];
  79.      }
  80.      
  81.      if (sizee%400==1)
  82.      {
  83.       long qq=it[sizee/400-1];
  84.       for (int j=1;j<=400;j++)
  85.       qq=r[qq];
  86.       it[sizee/400]=qq;                
  87.      }
  88.   //  for (int i=1;i<=sizee;i++)
  89.     // cout<<i<<" "<<l[i]<<" "<<r[i]<<" "<<c[i]<<"     ";
  90.      //cout<<endl;
  91. }
  92.  
  93. int main(){
  94. //freopen("bees.in","r",stdin);
  95. //freopen("bees.out","w",stdout);
  96. //freopen("C:/input.txt","r",stdin);
  97. //freopen("C:/output.txt","w",stdout);
  98. ios_base::sync_with_stdio(0);
  99.  
  100. cin>>st;
  101. n=st.size();
  102.  
  103. l[1]=r[1]=0;
  104.  
  105. sizee=1;
  106.  
  107. c[1]=st[0];
  108. it[0]=1;
  109.  
  110. for (int i=1;i<n;i++)
  111. {
  112.     add_c(st[i],i);
  113. }
  114.  
  115. //for (int i=1;i<=n;i++)
  116. //cout<<l[i]<<"   "<<r[i]<<"   "<<c[i]<<endl;
  117. while (cin>>st)
  118. {
  119.       if (st=="END")break;
  120.       else if (st=="P")
  121.       {
  122.            cin>>a>>b;
  123.            for (int i=a;i<=b;i++)
  124.            cout<<gch(i);
  125.            cout<<endl;
  126.        }
  127.        else
  128.        {
  129.            cin>>st1;
  130.            cin>>ps;
  131.            for (int i=0;i<st1.size();i++)
  132.            add_c(st1[i],ps+i);
  133.        }
  134. }
  135.  
  136.  
  137. cin.get();cin.get();
  138. return 0;}
Advertisement
Add Comment
Please, Sign In to add comment