Submission #1222712

#TimeUsernameProblemLanguageResultExecution timeMemory
1222712silence25XOR (IZhO12_xor)C++20
100 / 100
236 ms60500 KiB
#include <bits/stdc++.h> using namespace std; struct TrieNode { TrieNode* child[2]; // Array of pointers for 0 and 1 int min_index; // Store the minimum index for this path TrieNode() { child[0] = child[1] = nullptr; min_index = INT_MAX; } }; class Trie { private: TrieNode* root; public: Trie() { root = new TrieNode(); } void insert(long long x, int index) { TrieNode* node = root; for (int i = 63; i >= 0; --i) { int bit = (x >> i) & 1; if (!node->child[bit]) { // Check if child exists node->child[bit] = new TrieNode(); } node = node->child[bit]; // Move to the child node } node->min_index = min(node->min_index, index); // Update minimum index } pair<long long, int> query_max_xor(long long x) { TrieNode* node = root; long long result = 0; for (int i = 63; i >= 0; --i) { int bit = (x >> i) & 1; if (node->child[1 - bit]) { // Prefer the opposite bit to maximize XOR result |= (1LL << i); node = node->child[1 - bit]; } else if (node->child[bit]) { node = node->child[bit]; } else { return {0, INT_MAX}; // No valid path } } return {result, node->min_index}; // Return max XOR and min index } }; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int N; long long x; cin >> N >> x; vector<long long> a(N + 1); for (int i = 1; i <= N; ++i) { cin >> a[i]; } // Compute prefix XORs vector<long long> pref(N + 1); pref[0] = 0; for (int i = 1; i <= N; ++i) { pref[i] = pref[i - 1] ^ a[i]; } Trie trie; int max_k = 0; int best_i = 1; trie.insert(pref[0], 0); // Insert pref[0] = 0 at index 0 for (int j = 1; j <= N; ++j) { // Query for max XOR with pref[j] auto [xor_val, i_minus_1] = trie.query_max_xor(pref[j]); if (xor_val >= x && i_minus_1 < j) { int i = i_minus_1 + 1; int k = j - i + 1; if (k > max_k) { max_k = k; best_i = i; } } // Insert pref[j-1] into Trie trie.insert(pref[j - 1], j - 1); } cout << best_i << " " << max_k << endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...