Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define sz(o) ((int)o.size())
- #define all(o) o.begin(), o.end()
- #define rep(i, a, b) for(int i = (a); i <= (b); i++)
- #define repr(i, a, b) for(int i = (a); i >= (b); i--)
- #define INF 1000000000000000000LL
- #define MOD 1000000007
- #define EPS 1e-9
- #define PI 3.1415926535
- #define ff first
- #define ss second
- typedef long long int ll;
- typedef vector<ll> vll;
- typedef vector<int> vi;
- typedef pair<int, int> pi;
- typedef pair<ll, ll> pll;
- typedef vector<pll> vpll;
- typedef vector<pi> vpi;
- struct item{
- ll key, prior, val, sum;
- item *l, *r;
- item(ll key, ll prior):key(key), prior(prior), val(prior), sum(0), l(NULL), r(NULL){}
- };
- typedef item * pitem;
- ll sum(pitem t){ return t ? t->sum : 0; }
- void upd_sum(pitem t){ t->sum = t->val + sum(t->l) + sum(t->r); }
- void split(pitem t, pitem &l, pitem &r, ll x){
- if(!t) l = r = NULL;
- else if(x >= t->key) split(t->r, t->r, r, x), l = t;
- else split(t->l, l, t->l, x), r = t;
- }
- void merge(pitem l, pitem r, pitem &t){
- if(!l or !r) t = l ? l : r;
- else if(l->prior < r->prior) merge(l->r, r, l->r), t = l;
- else merge(l, r->l, r->l), t = r;
- }
- void insert(pitem &t, pitem it){
- if(!t) t = it;
- else if(it->key == t->key) t->val += it->val;
- else if(it->prior < t->prior) split(t, it->l, it->r, it->key), t = it;
- else insert(t->key < it->key ? t->r : t->l, it);
- upd_sum(t);
- }
- void erase(pitem &t, ll x){
- if(t->key == x) merge(t->l, t->r, t);
- else erase(t->key < x ? t->r : t->l, x);
- upd_sum(t);
- }
- ll search(pitem t, ll x){
- if(!t) return 0;
- else if(t->key <= x) return sum(t->l) + t->val + search(t->r, x);
- else return search(t->l, x);
- }
- pitem treap;
- ll q, l, a, v;
- void solve(int testcase) {
- cin >> q;
- rep(i, 1, q){
- cin >> a >> v;
- a ^= l, v ^= l;
- ll sum = v + search(treap, a);
- item *newItem = new item(a, v);
- insert(treap, newItem);
- cout << a << ' ' << sum << '\n';
- l = sum;
- }
- }
- int main() {
- #ifdef VPAL
- freopen("in.txt", "r", stdin);
- freopen("out.txt", "w", stdout);
- #endif
- ios_base::sync_with_stdio(false);
- cin.tie(NULL);
- cout.tie(NULL);
- cout << fixed << setprecision(20);
- clock_t b = clock();
- int t = 1;
- //cin >> t;
- rep(tt, 1, t) solve(tt);
- clock_t e = clock();
- cerr << (double(e - b) / CLOCKS_PER_SEC) << " sec";
- return 0;
- }
Add Comment
Please, Sign In to add comment