Submission #1276374

#TimeUsernameProblemLanguageResultExecution timeMemory
1276374papauloXOR (IZhO12_xor)C++20
100 / 100
79 ms22324 KiB
#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 timeMemoryGrader output
Fetching results...