#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define MAXI 10100100
#define MAXN 300300
int trie[MAXI][2];
int idx[MAXI];
int a[MAXN];
int n, k;
int id=0;
ll ans=0;
void insert(int v, int idd) {
int n=0;
for(int i=31;i>=0;i--) {
int c=(v>>i)&1;
int &t=trie[n][c];
if(!t) {
t=++id;
idx[t]=idd;
}
n=t;
}
}
int search(int v) {
int n=0;
int ans=0;
for(int i=31;i>=0;i--) {
int cv=(v>>i)&1;
int ck=(k>>i)&1;
int t=trie[n][cv^ck];
if(!ck) ans=max(ans, idx[trie[n][1^cv]]);
if(!t) {
return ans;
}
n=t;
}
ans=max(ans, idx[n]);
return ans;
}
int main() {
cin.tie(nullptr);
ios::sync_with_stdio(false);
cin >> n >> k;
for(int i=1;i<=n;i++) cin >> a[i];
int v=0;
int bstK=0, bstI=0;
for(int i=n;i>=1;i--) {
insert(v, i+1);
v^=a[i];
int k=search(v)-i;
if(k>=bstK) {
bstK=k;
bstI=i;
}
}
cout << bstI << " " << bstK << endl;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |