Submission #902509

#TimeUsernameProblemLanguageResultExecution timeMemory
902509LCJLYXOR (IZhO12_xor)C++14
100 / 100
324 ms116660 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define ld long double #define show(x,y) cout << y << " " << #x << endl; #define show2(x,y,i,j) cout << y << " " << #x << " " << j << " " << #i << endl; #define show3(x,y,i,j,p,q) cout << y << " " << #x << " " << j << " " << #i << " " << q << " " << #p << endl; #define show4(x,y) for(auto it:x) cout << it << " "; cout << #y << endl; typedef pair<long long,long long>pii; struct trie{ trie *next[2]; int left=INT_MAX; trie(){ next[0]=next[1]=NULL; } }; auto root=new trie(); void solve(){ int n,k; cin >> n >> k; int arr[n]; for(int x=0;x<n;x++){ cin >> arr[x]; } int hold=0; int best=-1; int index=-1; auto cur2=root; for(int x=30;x>=0;x--){ if(cur2->next[0]==NULL) cur2->next[0]=new trie(); cur2=cur2->next[0]; cur2->left=-1; } for(int x=0;x<n;x++){ hold^=arr[x]; auto cur=root; //query for(int y=30;y>=0;y--){ if(k&(1<<y)){ bool amos=(hold&(1<<y)); amos^=1; //cout << amos; if(cur->next[amos]==NULL)cur->next[amos]=new trie(); cur=cur->next[amos]; } else{ bool amos=(hold&(1<<y)); //cout << amos; if(cur->next[amos]==NULL)cur->next[amos]=new trie(); if(cur->next[!amos]!=NULL){ int cnt=x-cur->next[!amos]->left; if(cnt>best){ best=cnt; index=x+1; } } cur=cur->next[amos]; } } //cout << endl; //show(best,best); if(x-cur->left>best){ best=x-cur->left; index=x+1; } //add cur=root; for(int y=30;y>=0;y--){ bool amos=(hold&(1<<y)); if(cur->next[amos]==NULL)cur->next[amos]=new trie(); cur=cur->next[amos]; cur->left=min(cur->left,x); } //show(best2,best); } cout << index-best+1 << " " << best; } int32_t main(){ ios::sync_with_stdio(0); cin.tie(0); int t=1; //cin >> t; while(t--){ solve(); } }
#Verdict Execution timeMemoryGrader output
Fetching results...