Submission #1266192

#TimeUsernameProblemLanguageResultExecution timeMemory
1266192rayan_bdXOR (IZhO12_xor)C++20
0 / 100
0 ms320 KiB
#include <bits/stdc++.h> using namespace std; const int mxN = 550005; #define int long long int a[mxN]; struct Node { Node* children[2]; int mn_idx; Node() { children[0] = children[1] = NULL; mn_idx = mxN; } }; struct Trie { Node* root = new Node(); void add(int val, int idx) { Node* curr = root; for (int i = 32; i >= 0; --i) { int curr_bit = (val >> i) & 1; if (curr->children[curr_bit] == NULL) curr->children[curr_bit] = new Node(); curr = curr->children[curr_bit]; curr->mn_idx = min(curr->mn_idx, idx); } } int query(int val, int x) { Node* curr = root; if (!curr) return mxN; int idx = mxN; int xor_val = 0; for (int i = 32; i >= 0; --i) { int bit = (val >> i) & 1; int xbit = (x >> i) & 1; if (xbit == 1) { if (curr->children[1 - bit]) idx = min(idx, curr->children[1 - bit]->mn_idx); if (curr->children[bit]) curr = curr->children[bit]; else break; } else { if (curr->children[1 - bit]) { curr = curr->children[1 - bit]; } else if (curr->children[bit]) { curr = curr->children[bit]; } else break; } } return idx; } } tr; signed main() { ios_base::sync_with_stdio(0); cin.tie(nullptr); int n, x; cin >> n >> x; int pref = 0; tr.add(0, 0); pair<int, int> ans = {0, 0}; for (int i = 1; i <= n; ++i) { cin >> a[i]; pref ^= a[i]; int idx = tr.query(pref, x); if (idx != mxN) { int len = i - idx; if (len > ans.first) { ans = {len, idx + 1}; } } tr.add(pref, i); } cout << ans.second << " " << ans.first << "\n"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...