#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 time | Memory | Grader output |
---|
Fetching results... |