제출 #482964

#제출 시각아이디문제언어결과실행 시간메모리
482964FatihSolakXOR (IZhO12_xor)C++17
100 / 100
133 ms24256 KiB
#include <bits/stdc++.h> #define N 250005 #define K 29 using namespace std; struct node{ int val=0,l=0,r=0; }; node trie[N * K]; int arr[N]; int cnt = 1; void add(int x,int pos){ int now = 1; for(int i=0;i<=K;i++){ if((1<<(K-i)) & x){ if(trie[now].r == 0)trie[now].r = ++cnt; now = trie[now].r; } else{ if(trie[now].l == 0)trie[now].l = ++cnt; now = trie[now].l; } trie[now].val = max(trie[now].val,pos); } } void solve(){ int n,x; cin >> n >> x; for(int i=1;i<=n;i++)cin >> arr[i]; int xr = 0; int ans = 0; int pos = 0; for(int i=n;i>=1;i--){ xr ^= arr[i]; int maxi = 0; if(xr >= x)maxi = n+1; add(xr,i); int now = 1; for(int j=0;j<=K;j++){ if( (xr & (1<<(K-j))) == (x & (1<<(K-j)))){ if(!(x & (1<<(K-j)))){ maxi = max(maxi,trie[trie[now].r].val); } now = trie[now].l; } else{ if(!(x & (1<<(K-j)))){ maxi = max(maxi,trie[trie[now].l].val); } now = trie[now].r; } if(now == 0)break; } maxi = max(maxi,trie[now].val); if(ans <= maxi - i){ ans = maxi - i; pos = i; } } cout << pos << " " << ans; } int32_t main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); #ifdef Local freopen("in.txt","r",stdin); freopen("out.txt","w",stdout); #endif int t=1; //cin>>t; while(t--){ solve(); } #ifdef Local cout<<endl<<fixed<<setprecision(2)<<1000.0 * clock() / CLOCKS_PER_SEC<< " milliseconds "; #endif }
#Verdict Execution timeMemoryGrader output
Fetching results...