Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define int long long
- #define FOR(g,z,t) for(int g=z; g<=t; ++g)
- using namespace std;
- const int N = (3*1e5+1)*32;
- int n;
- int child[N][2],cnt=0,num[N];
- int Getbit(int val, int pos) {
- return 1 & (val >> (pos-1));
- }
- void ADD(int x) {
- int node =0;
- for(int i=31; i>=1; --i) {
- int k = Getbit(x,i);
- if (!child[node][k]) child[node][k]=++cnt;
- ++num[child[node][k]];
- node=child[node][k];
- }
- }
- int Query(int k) {
- int ans = 0;
- int node = 0;
- for(int i=31; i>=1; --i) {
- if (k <= num[child[node][0]]) node = child[node][0];
- else {
- k -= num[child[node][0]];
- ans += 1 << (i-1);
- node = child[node][1];
- }
- }
- return ans;
- }
- signed main()
- {
- ios_base::sync_with_stdio(false);
- cin.tie(0);cout.tie(0);
- freopen("RANDNUM.INP","r",stdin);
- cin >> n;
- while (n--) {
- int type,val;
- cin >> type >> val;
- if (type == 1) {
- ADD(val);
- }
- else {
- cout << Query(val) << endl;
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement