Submission #650071

#TimeUsernameProblemLanguageResultExecution timeMemory
650071groshiXOR (IZhO12_xor)C++17
100 / 100
137 ms90288 KiB
#include<iostream> using namespace std; struct wi{ int t[2]; int minn=1e9; }*w; int nowy=2; int szukaj(int jest,int co,int x,int gdzie) { if(gdzie==-1) return w[jest].minn; int mam=x&(1<<gdzie); if(mam==0) { int cos; mam=co&(1<<gdzie); if(mam==0) cos=0; else cos=1; if(w[jest].t[!cos]!=0) return w[w[jest].t[!cos]].minn; else if(w[jest].t[cos]==0) return 1e9; else return szukaj(w[jest].t[cos],co,x,gdzie-1); } else{ int cos; mam=co&(1<<gdzie); if(mam==0) cos=0; else cos=1; if(w[jest].t[!cos]==0) return 1e9; else return szukaj(w[jest].t[!cos],co,x,gdzie-1); } } void dodaj(int x,int co,int gdzie,int nr) { w[x].minn=min(w[x].minn,nr); if(gdzie==-1) return; int cos; int mam=co&(1<<gdzie); if(mam==0) cos=0; else cos=1; if(w[x].t[cos]==0) { w[x].t[cos]=nowy; nowy++; dodaj(nowy-1,co,gdzie-1,nr); } else dodaj(w[x].t[cos],co,gdzie-1,nr); } int32_t main() { cin.tie(0); cout.tie(0); ios_base::sync_with_stdio(0); int n,x,y; cin>>n>>x; w=new wi[n*30]; int xorr=0; int wynik=0; int pocz=0; for(int i=1;i<=n;i++) { cin>>y; xorr^=y; if(xorr>=x) { wynik=i; pocz=1; } int gdzie=szukaj(1,xorr,x,30); if(i-gdzie>wynik) { wynik=i-gdzie; pocz=gdzie+1; } dodaj(1,xorr,30,i); } cout<<pocz<<" "<<wynik; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...