Madiyar

2012-2013 neercshool 17 november Taks B

Jan 3rd, 2013
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.45 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstdlib>
  4. #include <cstring>
  5. #include <algorithm>
  6. #include <cmath>
  7. #include <vector>
  8. #include <map>
  9. #include <set>
  10. #include <ctime>
  11. #include <cassert>
  12. #include <queue>
  13.  
  14. using namespace std;
  15.  
  16. #define f first
  17. #define s second
  18. #define mp make_pair
  19. #define pb push_back
  20. #define forit(it,con) for (typeof(con.begin()) it = con.begin(); it != con.end(); ++it)
  21. #define f0(a) memset(a, 0, sizeof(a))
  22. #define all(v) v.begin(), v.end()
  23. #define pii pair<int,int>
  24. #define vi vector<int>
  25. #define ll long long
  26.  
  27. #ifdef WIN32
  28.     #define I64 "%I64d"
  29. #else
  30.     #define I64 "%lld"
  31. #endif
  32. char s[100];
  33. int n;
  34. struct node {
  35.     int v;
  36.     int n, p;
  37.     node() {}
  38.     node(int vv, int pp = 0, int nn = 0) {
  39.         v = vv; p = pp; n = nn;
  40.     }
  41. } T[1000000];
  42. int head, tail, mid, sz, m = 0;
  43.  
  44. void print() {
  45.     int cur = head;
  46.     for (int i = 0; i < m; ++i) {
  47.         printf("%d ", T[cur].v);
  48.         cur = T[cur].n;
  49.     }
  50.     printf("| %d %d %d\n", T[head].v, T[mid].v, T[tail].v);
  51. }
  52. int main() {
  53.     freopen("kenobi.in","r",stdin);
  54.     freopen("kenobi.out","w",stdout);
  55.  
  56.  
  57.     scanf("%d", &n);
  58.     sz = 1;
  59.     for (int i = 0; i < n; ++i) {
  60.         scanf("\n%s", s);
  61.         if (s[0] == 'a') {
  62.             int x;
  63.             scanf("%d", &x);
  64.             T[sz++] = node(x);
  65.             T[sz - 1].p = tail;
  66.             T[tail].n = sz - 1;
  67.             tail = sz - 1;
  68.            
  69.             if (m % 2 == 1)
  70.                 mid = T[mid].n;
  71.             ++m;
  72.             if (m == 1) {
  73.                 head = tail = mid = sz - 1;
  74.             }
  75.         } else if (s[0] == 't') {
  76.  
  77.             if (tail) {
  78.                 tail = T[tail].p;
  79.                 T[tail].n = 0;
  80.                 if (m % 2 == 0)
  81.                     mid = T[mid].p;
  82.                 --m;
  83.                 if (m == 0) {
  84.                     head = tail = mid = 0;
  85.                 }  
  86.             }
  87.         } else if (s[0] == 'm') {
  88.             if (m > 1) {
  89.                 T[tail].n = head;
  90.                 T[head].p = tail;
  91.                 int pp = T[mid].p;
  92.                 T[pp].n = T[mid].p = 0;
  93.                 int nmid = head;
  94.                 if (m % 2 == 1) nmid = tail;
  95.                 head = mid; tail = pp;
  96.                 mid = nmid;
  97.             }
  98.         }
  99.  
  100.     }
  101.     printf("%d\n", m);
  102.     for (int i = 0; i < m; ++i) {
  103.         printf("%d ", T[head].v);
  104.         head = T[head].n;
  105.     }
  106.     return 0;
  107. }
Advertisement
Add Comment
Please, Sign In to add comment