Submission #41
Details and source code
| ID | Time | User | Problem | Lang | Verdict |
|---|---|---|---|---|---|
| 41 | Apr 14, 2025, 12:55 PM | admin | The Duel of Spells | cpp | AC |
Source Code
cpp#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct Trie {
Trie* child[2];
Trie() { child[0] = child[1] = nullptr; }
};
void insertTrie(Trie* root, int num) {
Trie* cur = root;
for (int i = 31; i >= 0; i--) {
int bit = (num >> i) & 1;
if (!cur->child[bit])
cur->child[bit] = new Trie();
cur = cur->child[bit];
}
}
int query(Trie* root, int num) {
Trie* cur = root;
int ans = 0;
for (int i = 31; i >= 0; i--) {
int bit = (num >> i) & 1;
if (cur->child[1 - bit]) {
ans |= (1 << i);
cur = cur->child[1 - bit];
} else {
cur = cur->child[bit];
}
}
return ans;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
cin >> n;
vector<int> arr(n);
for (int i = 0; i < n; i++)
cin >> arr[i];
Trie* root = new Trie();
insertTrie(root, arr[0]);
int maxXor = 0;
for (int i = 1; i < n; i++) {
maxXor = max(maxXor, query(root, arr[i]));
insertTrie(root, arr[i]);
}
cout << maxXor;
return 0;
}