제출 #1259389

#제출 시각아이디문제언어결과실행 시간메모리
1259389proofyXOR (IZhO12_xor)C++20
0 / 100
0 ms324 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long const int B = 30; const int N = 250123; int trie[N * B][2], id; int max_index[N * B], lower; void insert(int x, int index, int i = B - 1, int v = 0) { if (i == -1) return void(max_index[v] = index); int b = (x >> i) & 1; if (!trie[v][b]) trie[v][b] = ++id; int u = trie[v][b]; insert(x, index, i - 1, u); max_index[v] = max(max_index[v], max_index[u]); } int query(int x) { int v = 0, res = -1; for (int i = B - 1; i >= 0; --i) { int b = (x >> i) & 1; int b2 = (lower >> i) & 1; if (b2) { v = trie[v][1 - b]; } else { if (trie[v][1 - b]) res = max(res, max_index[trie[v][1 - b]]); v = trie[v][b]; } if (!v) return res; } if (v) res = max(res, max_index[v]); return res; } int p[N], n; int main() { ios::sync_with_stdio(0); cin.tie(0); cin >> n >> lower; for (int i = 1; i <= n; i++) cin >> p[i]; for (int i = n; i >= 1; --i) p[i] ^= p[i + 1]; insert(0, n + 1); int best = -1, max_interval = 0; for (int i = n; i >= 1; --i) { int k = query(p[i]) - i; if (k >= max_interval) { max_interval = k; best = i; } insert(p[i], i); } cout << best << " " << max_interval << "\n"; }
#Verdict Execution timeMemoryGrader output
Fetching results...