Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- typedef long long ll;
- typedef pair<ll,ll> ii;
- const int kn = 5e4 + 5, sqr = 223;
- #define ff(i,n) for(int i = 1; i<=n;i++)
- #define _ff(i,n) for(int i = n; i>=1; i--)
- struct Query
- {
- int l, r, id;
- }qr[5001];
- bool optionqr(Query a, Query b)
- {
- if(int(a.r/sqr) != int(b.r/sqr)) return int(a.r/sqr) < int(b.r/sqr);
- return a.l < b.l;
- }
- struct Trie
- {
- multiset<int> val;
- int c[2];
- Trie()
- {
- c[0] = c[1] = -1;
- }
- }trie[2][kn];
- int n, q;
- int a[kn], top = 0;
- int F(int i)
- {
- int tmp = i%4;
- if(tmp == 0) return i;
- if(tmp == 1) return 1;
- if(tmp == 2) return i+1;
- return 0;
- }
- void add(int num, int k)
- {
- int p = 0;
- int X = (num == 1) ? F(k) : F(k-1);
- for(int i = 19; i>=0; i--)
- {
- trie[num][p].val.insert(k);
- int tmp = (X>>i)&1;
- if(trie[num][p].c[tmp] == -1) trie[num][p].c[tmp] = ++top;
- p = trie[num][p].c[tmp];
- if(i==0) trie[num][p].val.insert(k);
- }
- }
- void dele(int num, int k)
- {
- int p = 0;
- int X = (num == 1) ? F(k) : F(k-1);
- for(int i = 19; i>=0; i--)
- {
- auto it = trie[num][p].val.find(k);
- trie[num][p].val.erase(k);
- int tmp = (X>>i)&1;
- p = trie[num][p].c[tmp];
- if(i==0)
- {
- it = trie[num][p].val.find(k);
- trie[num][p].val.erase(it);
- }
- }
- }
- int findtrie0(int k)
- {
- int p = 0, X = F(k);
- //cout << X << endl;
- bool larger = false;
- for(int i = 19; i>=0; i--)
- {
- int tmp = (X>>i)&1;
- int cur = -1;
- if(not (trie[0][p].c[1-tmp] == -1 || not (trie[0][trie[0][p].c[1-tmp]].val).size() || *(trie[0][trie[0][p].c[1-tmp]].val).begin() > k) )
- {
- cur = 1-tmp;
- if(not larger) larger = true;
- //cout <<"ok "<<i << endl;
- }
- else
- {
- if(not larger && tmp == 1) return X;
- cur = tmp;
- }
- if(cur == -1) return 696969669;
- p = trie[0][p].c[cur];
- if(i==0) return (F(*trie[0][p].val.begin() -1)^X);
- }
- }
- int findtrie1(int X)
- {
- }
- int main()
- {
- add(0,21); add(0,5); dele(0,21);
- cout << findtrie0(104);
- scanf("%d %d", &n, &q);
- ff(i,n)
- {
- scanf("%d", &a[i]);
- }
- ff(i,q)
- {
- scanf("%d %d %d", &qr[i].l, &qr[i].r);
- qr[i].id = i;
- }
- sort(qr+1, qr+q+1, optionqr);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement