Guest User

Untitled

a guest
Aug 27th, 2018
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.46 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define sz(o) ((int)o.size())
  5. #define all(o) o.begin(), o.end()
  6. #define rep(i, a, b) for(int i = (a); i <= (b); i++)
  7. #define repr(i, a, b) for(int i = (a); i >= (b); i--)
  8. #define INF 1000000000000000000LL
  9. #define MOD 1000000007
  10. #define EPS 1e-9
  11. #define PI 3.1415926535
  12. #define ff first
  13. #define ss second
  14. typedef long long int ll;
  15. typedef vector<ll> vll;
  16. typedef vector<int> vi;
  17. typedef pair<int, int> pi;
  18. typedef pair<ll, ll> pll;
  19. typedef vector<pll> vpll;
  20. typedef vector<pi> vpi;
  21.  
  22. struct item{
  23.     ll key, prior, val, sum;
  24.     item *l, *r;
  25.     item(ll key, ll prior):key(key), prior(prior), val(prior), sum(0), l(NULL), r(NULL){}
  26. };
  27.  
  28. typedef item * pitem;
  29.  
  30. ll sum(pitem t){ return t ? t->sum : 0; }
  31.  
  32. void upd_sum(pitem t){ t->sum = t->val + sum(t->l) + sum(t->r); }
  33.  
  34. void split(pitem t, pitem &l, pitem &r, ll x){
  35.     if(!t) l = r = NULL;
  36.     else if(x >= t->key) split(t->r, t->r, r, x), l = t;
  37.     else split(t->l, l, t->l, x), r = t;
  38. }
  39.  
  40. void merge(pitem l, pitem r, pitem &t){
  41.     if(!l or !r) t = l ? l : r;
  42.     else if(l->prior < r->prior) merge(l->r, r, l->r), t = l;
  43.     else merge(l, r->l, r->l), t = r;
  44. }
  45.  
  46. void insert(pitem &t, pitem it){
  47.     if(!t) t = it;
  48.     else if(it->key == t->key) t->val += it->val;
  49.     else if(it->prior < t->prior) split(t, it->l, it->r, it->key), t = it;
  50.     else insert(t->key < it->key ? t->r : t->l, it);
  51.     upd_sum(t);
  52. }
  53.  
  54. void erase(pitem &t, ll x){
  55.     if(t->key == x) merge(t->l, t->r, t);
  56.     else erase(t->key < x ? t->r : t->l, x);
  57.     upd_sum(t);
  58. }
  59.  
  60. ll search(pitem t, ll x){
  61.     if(!t) return 0;
  62.     else if(t->key <= x) return sum(t->l) + t->val + search(t->r, x);
  63.     else return search(t->l, x);
  64. }
  65.  
  66. pitem treap;
  67. ll q, l, a, v;
  68.  
  69. void solve(int testcase) {
  70.     cin >> q;
  71.     rep(i, 1, q){
  72.         cin >> a >> v;
  73.         a ^= l, v ^= l;
  74.         ll sum = v + search(treap, a);
  75.         item *newItem = new item(a, v);
  76.         insert(treap, newItem);
  77.         cout << a << ' ' << sum << '\n';
  78.         l = sum;
  79.     }
  80. }
  81.  
  82. int main() {
  83.     #ifdef VPAL
  84.     freopen("in.txt", "r", stdin);
  85.     freopen("out.txt", "w", stdout);
  86.     #endif
  87.     ios_base::sync_with_stdio(false);
  88.     cin.tie(NULL);
  89.     cout.tie(NULL);
  90.     cout << fixed << setprecision(20);
  91.     clock_t b = clock();
  92.     int t = 1;
  93.     //cin >> t;
  94.     rep(tt, 1, t) solve(tt);
  95.     clock_t e = clock();
  96.     cerr << (double(e - b) / CLOCKS_PER_SEC) << " sec";
  97.     return 0;
  98. }
Add Comment
Please, Sign In to add comment