max Xor of 2 number in array
parent
62907b69ec
commit
0ba659b442
|
@ -0,0 +1,145 @@
|
||||||
|
#include <bits/stdc++.h>
|
||||||
|
using namespace std;
|
||||||
|
#define ll long long int
|
||||||
|
#define for0(i, n) for (int i = 0; i < n; i++)
|
||||||
|
#define vi vector<int>
|
||||||
|
#define pb push_back
|
||||||
|
#define sz(x) sizeof(x)
|
||||||
|
#define vec(n, x) vector<int> v(n, x)
|
||||||
|
const ll INF = 1e18;
|
||||||
|
const ll MOD = 1000000007;
|
||||||
|
#define hi \
|
||||||
|
ll tests; \
|
||||||
|
cin >> tests; \
|
||||||
|
while (tests--)
|
||||||
|
#define all(x) x.begin(), x.end()
|
||||||
|
#define readv(vec) \
|
||||||
|
for (auto &x : vec) \
|
||||||
|
{ \
|
||||||
|
cin >> x; \
|
||||||
|
}
|
||||||
|
#define PHI M_PI
|
||||||
|
#define graph \
|
||||||
|
int V; \
|
||||||
|
cin >> V; \
|
||||||
|
vector<int> adj[V]; \
|
||||||
|
int e; \
|
||||||
|
for (int i = 0; i < e; i++) \
|
||||||
|
{ \
|
||||||
|
int u, v; \
|
||||||
|
cin >> u >> v; \
|
||||||
|
adj[u].push_back(v); \
|
||||||
|
adj[v].push_back(u); \
|
||||||
|
}
|
||||||
|
#define printv(vec) \
|
||||||
|
for (auto x : vec) \
|
||||||
|
{ \
|
||||||
|
cout << x << ' '; \
|
||||||
|
} \
|
||||||
|
cout << endl;
|
||||||
|
#define sortasc(vec) sort(all(vec));
|
||||||
|
#define sortdes(vec) sort(vec.rbegin(), vec.rend());
|
||||||
|
#define setpre(x) cout << fixed << setprecision(10) << x << endl
|
||||||
|
#define kick cout << 'C' << 'a' << 's' << 'e' << ' ' << '#' << k << ':' << ' '
|
||||||
|
struct node
|
||||||
|
{
|
||||||
|
node *left;
|
||||||
|
node *right;
|
||||||
|
};
|
||||||
|
class Trie
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
node *root;
|
||||||
|
Trie()
|
||||||
|
{
|
||||||
|
root = new node();
|
||||||
|
}
|
||||||
|
|
||||||
|
void insert(int x)
|
||||||
|
{
|
||||||
|
node *temp = root;
|
||||||
|
int idx = 31;
|
||||||
|
while (idx >= 0)
|
||||||
|
{
|
||||||
|
int mask = (1 << idx);
|
||||||
|
if (x & mask)
|
||||||
|
{
|
||||||
|
// cout<<idx<<" ";
|
||||||
|
if (temp->right == NULL)
|
||||||
|
{
|
||||||
|
temp->right = new node();
|
||||||
|
}
|
||||||
|
temp = temp->right;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (temp->left == NULL)
|
||||||
|
{
|
||||||
|
temp->left = new node();
|
||||||
|
}
|
||||||
|
temp = temp->left;
|
||||||
|
}
|
||||||
|
idx--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int query(int x)
|
||||||
|
{
|
||||||
|
node *temp = root;
|
||||||
|
int idx = 31;
|
||||||
|
int sol = 0;
|
||||||
|
while (idx >= 0)
|
||||||
|
{
|
||||||
|
int mask = (1 << idx);
|
||||||
|
if ((mask & x))
|
||||||
|
{
|
||||||
|
// cout<<"jo";
|
||||||
|
if (temp->right == NULL)
|
||||||
|
{
|
||||||
|
temp = temp->left;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sol |= mask;
|
||||||
|
temp = temp->right;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (temp->left == NULL)
|
||||||
|
{
|
||||||
|
sol |= mask;
|
||||||
|
temp = temp->right;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
temp = temp->left;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
idx--;
|
||||||
|
}
|
||||||
|
return sol;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int n;
|
||||||
|
cin >> n;
|
||||||
|
vector<int> nums(n);
|
||||||
|
Trie *t = new Trie();
|
||||||
|
for (auto &i : nums)
|
||||||
|
{
|
||||||
|
cin>>i;
|
||||||
|
t->insert(i);
|
||||||
|
}
|
||||||
|
int mx = 0;
|
||||||
|
// cout<<res;
|
||||||
|
for (auto i : nums)
|
||||||
|
{
|
||||||
|
int mask = INT_MAX;
|
||||||
|
int req = mask ^ i;
|
||||||
|
int res = t->query(req);
|
||||||
|
// cout<<res<<" ";
|
||||||
|
mx = max(mx, res ^ i);
|
||||||
|
}
|
||||||
|
cout << mx;
|
||||||
|
}
|
Loading…
Reference in New Issue