Submission #1224731

#TimeUsernameProblemLanguageResultExecution timeMemory
1224731MuhammetXOR (IZhO12_xor)C++20
0 / 100
0 ms320 KiB
#include "bits/stdc++.h" using namespace std; #define ll long long #define SZ(s) (int)s.size() #define ff first #define ss second const int N = (5e5 + 5); const int M = 1e9 + 7; int v[N * 30][2], s[N * 30], ans, T, n, k; void upd(int nd, int x, int y, int vl) { if(y == -1) { if(s[nd] == 0) s[nd] = vl; s[nd] = min(vl, s[nd]); return; } int t = (x >> y) & 1; if(!v[nd][t]) v[nd][t] = ++T; upd(v[nd][t], x, y-1, vl); s[nd] = min((!v[nd][0] ? n+1 : s[v[nd][0]]), (!v[nd][1] ? n+1 : s[v[nd][1]])); } void fnd(int nd, int x, int y) { if(y == -1) { ans = min(ans, s[nd]); return; } int t = (x >> y) & 1, tk = (k >> y) & 1; for(int i = 0; i < 2; i++) { if(i ^ t > tk and v[nd][i]) ans = min(ans, s[v[nd][i]]); } for(int i = 0; i < 2; i++) { if(i ^ t == tk and v[nd][i]) { fnd(v[nd][i], x, y-1); return; } } } int main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); cin >> n >> k; vector <int> p(n+1, 0); int mx = 0, l = 0; for(int i = 1; i <= n; i++) { int x; cin >> x; p[i] = p[i-1] ^ x; upd(0, p[i-1], 29, i); ans = n+1; fnd(0, p[i], 29); if(ans <= i) { if(i - ans + 1 > mx) { l = ans; mx = i - ans + 1; } } } cout << l << ' ' << mx; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...