Submission #1146914

#TimeUsernameProblemLanguageResultExecution timeMemory
1146914yasserXOR (IZhO12_xor)C++17
0 / 100
0 ms320 KiB
#include <bits/stdc++.h> using namespace std; void Yasser() { ios::sync_with_stdio(0); cin.tie(0); } struct Node { int childs[2]{}; int pre; int &operator[](int x) { return childs[x]; } }; struct Trie { vector<Node> trie; int newNode() { trie.emplace_back(); return trie.size() - 1; } void clear() { trie.clear(); } Trie() { clear(); newNode(); } bool sz(int node) { return (trie[node].pre > 0); } void insertOrremove(int x, int op) { int node = 0; for (int i = 30; i >= 0; i--) { int bit = x >> i & 1; if (trie[node][bit] == 0) { trie[node][bit] = newNode(); } node = trie[node][bit]; trie[node].pre += op; } } int Query(int x) { int res = 0; int node = 0; for (int i = 30; i >= 0; i--) { int bit = x >> i & 1; if (trie[node][1 - bit]) { res |= (1 << i); node = trie[node][1 - bit]; } else { node = trie[node][bit]; } } return res; } }; void solve() { ifstream cin("c.in"); ofstream cout("c.out"); int n, x; cin >> n >> x; map<int, vector<int>> idxs; idxs[0].emplace_back(0); vector<int> arr(n + 1); for (int i = 1; i <= n; i++) { cin >> arr[i]; arr[i] ^= arr[i - 1]; idxs[arr[i]].emplace_back(i); } Trie triee; triee.insertOrremove(0, +1); int max_xor = 0, length = 0, start_index = 0; for (int i = 1; i <= n; i++) { int max_possible = triee.Query(arr[i]); if ((max_possible ^ arr[i]) >= x) { int candidate_length = i - *idxs[max_possible].begin(); if (candidate_length > length) { length = candidate_length; start_index = *idxs[max_possible].begin(); } } triee.insertOrremove(arr[i], +1); } cout << start_index + 1 << ' ' << length << endl; } signed main() { int test_cases = 1; //cin >> test_cases; while (test_cases--) { solve(); } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...