Advertisement
Guest User

Untitled

a guest
Jun 26th, 2014
262
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.39 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <vector>
  4. #include <set>
  5. #include <cassert>
  6.  
  7. using namespace std;
  8.  
  9. #define F first
  10. #define S second
  11. #define MP make_pair
  12.  
  13. const int maxn = 100010;
  14.  
  15. int t[4 * maxn];
  16. vector <pair <int, int> > a;
  17. set <int> s;
  18.  
  19. int gcd(int a, int b) {
  20.     if (!a || !b)
  21.         return a + b;
  22.  
  23.     return gcd(b % a, a);
  24. }
  25.  
  26. void upd(int v, int l, int r, int val, int cnt) {
  27.     if (l > r || a[l].F > val || a[r].F < val)
  28.         return;    
  29.  
  30.     if (l == r) {
  31.         assert(a[l].F == val);
  32.  
  33.         a[l].S += cnt;
  34.  
  35.         if (a[l].S > 0)
  36.             t[v] = val;
  37.         else
  38.             t[v] = 0;
  39.  
  40.         return;
  41.     }
  42.  
  43.     int m = (l + r) >> 1;
  44.  
  45.     upd(v << 1, l, m, val, cnt);
  46.     upd((v << 1) + 1, m + 1, r, val, cnt);
  47.  
  48.     t[v] = gcd(t[v << 1], t[(v << 1) + 1]);
  49. }
  50.  
  51. int main() {
  52.     #ifndef ONLINE_JUDGE
  53.         freopen("in", "r", stdin);
  54.     #endif
  55.  
  56.     int n;
  57.  
  58.     cin >> n;
  59.  
  60.     vector <pair <int, char> > b(n);
  61.  
  62.     for (int i = 0; i < n; i++) {
  63.         cin >> b[i].S >> b[i].F;
  64.  
  65.         s.insert(b[i].F);
  66.     }
  67.  
  68.     a.reserve(s.size());
  69.  
  70.     int sz = s.size();
  71.  
  72.     for (set <int> :: iterator it = s.begin(); it != s.end(); it++) {
  73.         a.push_back(MP(*it, 0));
  74.     }          
  75.  
  76.     for (int i = 0; i < n; i++) {
  77.         if (b[i].S == '+')
  78.             upd(1, 0, sz - 1, b[i].F, 1);
  79.         else
  80.             upd(1, 0, sz - 1, b[i].F, -1);
  81.                
  82.         printf("%d\n", t[1] ? t[1] : 1);
  83.     }
  84.  
  85.     return 0;
  86. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement