xor.cpp: In function 'void Insert(int, int)':
xor.cpp:18:30: warning: unnecessary parentheses in declaration of 'i' [-Wparentheses]
18 | #define bfff(i,a,b) for (int (i) = (b); (i) >= (a); (i)--)
| ^
xor.cpp:58:5: note: in expansion of macro 'bfff'
58 | bfff(i,0,30)
| ^~~~
xor.cpp: In function 'int Get(int, int)':
xor.cpp:18:30: warning: unnecessary parentheses in declaration of 'i' [-Wparentheses]
18 | #define bfff(i,a,b) for (int (i) = (b); (i) >= (a); (i)--)
| ^
xor.cpp:77:5: note: in expansion of macro 'bfff'
77 | bfff(i,0,30)
| ^~~~
xor.cpp: In function 'int main()':
xor.cpp:16:29: warning: unnecessary parentheses in declaration of 'i' [-Wparentheses]
16 | #define fff(i,a,b) for (int (i) = (a); (i) <= b; (i)++)
| ^
xor.cpp:108:5: note: in expansion of macro 'fff'
108 | fff(i,1,n) cin>>a[i];
| ^~~
xor.cpp:16:29: warning: unnecessary parentheses in declaration of 'i' [-Wparentheses]
16 | #define fff(i,a,b) for (int (i) = (a); (i) <= b; (i)++)
| ^
xor.cpp:109:5: note: in expansion of macro 'fff'
109 | fff(i,1,n) xr[i]=xr[i-1]^a[i];
| ^~~
xor.cpp:16:29: warning: unnecessary parentheses in declaration of 'i' [-Wparentheses]
16 | #define fff(i,a,b) for (int (i) = (a); (i) <= b; (i)++)
| ^
xor.cpp:110:5: note: in expansion of macro 'fff'
110 | fff(i,0,3729105) mn[i]=1e9;
| ^~~
xor.cpp:16:29: warning: unnecessary parentheses in declaration of 'i' [-Wparentheses]
16 | #define fff(i,a,b) for (int (i) = (a); (i) <= b; (i)++)
| ^
xor.cpp:115:5: note: in expansion of macro 'fff'
115 | fff(i,1,n)
| ^~~
xor.cpp:110:27: warning: iteration 3729105 invokes undefined behavior [-Waggressive-loop-optimizations]
110 | fff(i,0,3729105) mn[i]=1e9;
| ~~~~~^~~~
xor.cpp:16:44: note: within this loop
16 | #define fff(i,a,b) for (int (i) = (a); (i) <= b; (i)++)
| ~~~~^~~~~~~~~~~~
17 | #define bff(i,a,b) for (int (i) = (b)-1; (i) >= (a); (i)--)
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
18 | #define bfff(i,a,b) for (int (i) = (b); (i) >= (a); (i)--)
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
19 | #define sum_overflow(a,b) __builtin_add_overflow_p ((a), (b), (__typeof__ ((a) + (b))) 0)
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
20 | #define mul_overflow(a,b) __builtin_mul_overflow_p ((a), (b), (__typeof__ ((a) + (b))) 0)
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
21 |
|
22 | using namespace std;
| ~~~~~~~~~~~~~~~~~~~~
23 | long double typedef ld;
| ~~~~~~~~~~~~~~~~~~~~~~~
24 | unsigned int typedef ui;
| ~~~~~~~~~~~~~~~~~~~~~~~~
25 | long long int typedef li;
| ~~~~~~~~~~~~~~~~~~~~~~~~~
26 | pair<int,int> typedef pii;
| ~~~~~~~~~~~~~~~~~~~~~~~~~~
27 | pair<li,li> typedef pli;
| ~~~~~~~~~~~~~~~~~~~~~~~~
28 | pair<ld,ld> typedef pld;
| ~~~~~~~~~~~~~~~~~~~~~~~~
29 | vector<vector<int>> typedef graph;
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
30 | unsigned long long int typedef ull;
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
31 | const int mod = 998244353;
| ~~~~~~~~~~~~~~~~~~~~~~~~~~
32 | //const int mod = 1000000007;
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
33 |
|
34 | using namespace __gnu_pbds;
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~
35 | template <class T> using oset = tree<T, null_type,less<T>, rb_tree_tag,tree_order_statistics_node_update>;
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
36 | template <class T> using omset = tree<T, null_type,less_equal<T>, rb_tree_tag,tree_order_statistics_node_update>;
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
37 |
|
38 |
|
39 |
|
40 |
|
41 |
|
42 |
|
43 |
|
44 | //Note to self: Check for overflow
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
45 |
|
46 | //trie gas
| ~~~~~~~~~~
47 |
|
48 | int n,a[250005];
| ~~~~~~~~~~~~~~~~
49 | li xr[250005];
| ~~~~~~~~~~~~~~
50 |
|
51 | int mn[3729105];
| ~~~~~~~~~~~~~~~~
52 | int tr[3729105][2];
| ~~~~~~~~~~~~~~~~~~~
53 | int br=1;
| ~~~~~~~~~
54 |
|
55 | void Insert(int x,int pos)
| ~~~~~~~~~~~~~~~~~~~~~~~~~~
56 | {
| ~
57 | int node=0;
| ~~~~~~~~~~~
58 | bfff(i,0,30)
| ~~~~~~~~~~~~
59 | {
| ~
60 | if (!(x&(1<<i)))
| ~~~~~~~~~~~~~~~~
61 | {
| ~
62 | if (!tr[node][0]) tr[node][0]=++br;
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
63 | node=tr[node][0];
| ~~~~~~~~~~~~~~~~~
64 | }
| ~
65 | else
| ~~~~
66 | {
| ~
67 | if (!tr[node][1]) tr[node][1]=++br;
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
68 | node=tr[node][1];
| ~~~~~~~~~~~~~~~~~
69 | }
| ~
70 | mn[node]=min(mn[node],pos);
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~
71 | }
| ~
72 | }
| ~
73 |
|
74 | int Get(int x,int k)
| ~~~~~~~~~~~~~~~~~~~~
75 | {
| ~
76 | int node=0,res=1e9;
| ~~~~~~~~~~~~~~~~~~~
77 | bfff(i,0,30)
| ~~~~~~~~~~~~
78 | {
| ~
79 | if (k&(1<<i))
| ~~~~~~~~~~~~~
80 | {
| ~
81 | int dr;
| ~~~~~~~
82 | if (x&(1<<i)) dr=0;
| ~~~~~~~~~~~~~~~~~~~
83 | else dr=1;
| ~~~~~~~~~~
84 | if (!tr[node][dr]) break;
| ~~~~~~~~~~~~~~~~~~~~~~~~~
85 | node=tr[node][dr];
| ~~~~~~~~~~~~~~~~~~
86 | }
| ~
87 | else
| ~~~~
88 | {
| ~
89 | int dr;
| ~~~~~~~
90 | if (x&(1<<i)) dr=0;
| ~~~~~~~~~~~~~~~~~~~
91 | else dr=1;
| ~~~~~~~~~~
92 | if (tr[node][dr])
| ~~~~~~~~~~~~~~~~~
93 | {
| ~
94 | res=min(res,mn[tr[node][dr]]);
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
95 | }
| ~
96 | if (!tr[node][dr^1]) break;
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~
97 | node=tr[node][dr^1];
| ~~~~~~~~~~~~~~~~~~~~
98 | }
| ~
99 | }
| ~
100 | return res;
| ~~~~~~~~~~~
101 | }
| ~
102 |
|
103 | int main()
| ~~~~~~~~~~
104 | {
| ~
105 | FAST;
| ~~~~~
106 |
|
107 | int n,x; cin>>n>>x;
| ~~~~~~~~~~~~~~~~~~~
108 | fff(i,1,n) cin>>a[i];
| ~~~~~~~~~~~~~~~~~~~~~
109 | fff(i,1,n) xr[i]=xr[i-1]^a[i];
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
110 | fff(i,0,3729105) mn[i]=1e9;
| ~~~~~~~~~~~~~~~
xor.cpp:110:5: note: in expansion of macro 'fff'
110 | fff(i,0,3729105) mn[i]=1e9;
| ^~~