제출 #1136555

#제출 시각아이디문제언어결과실행 시간메모리
1136555imarnXOR (IZhO12_xor)C++20
100 / 100
158 ms7328 KiB
#include<bits/stdc++.h> #define ll long long #define pii pair<int,int> #define pll pair<ll,ll> #define plx pair<ll,int> #define f first #define s second #define pb push_back #define all(x) x.begin(),x.end() #define vi vector<int> #define vvi vector<vi> #define pp pair<ll,int> #define ub(x,i) upper_bound(all(x),i)-x.begin() #define lb(x,i) lower_bound(all(x),i)-x.begin() using namespace std; const int mxn=3e5+5,inf=1e9+7; ll a[mxn]{0}; vector<ll>v; int t[2*mxn]; void upd(int i,int sz,int amt){ i+=sz;t[i]=min(amt,t[i]); for(i>>=1;i;i>>=1)t[i]=min(t[2*i],t[2*i+1]); } int qr(int l,int r,int sz,int rs=1e9){ for(l+=sz,r+=sz;l<r;l>>=1,r>>=1){ if(l&1)rs=min(rs,t[l++]); if(r&1)rs=min(rs,t[--r]); }return rs; }int ans[mxn]{0}; int main(){ ios_base::sync_with_stdio(0);cin.tie(0); ll n,x;cin>>n>>x; for(int i=n;i>=1;i--)cin>>a[i];v.pb(0); for(int i=1;i<=n;i++)a[i]^=a[i-1],v.pb(a[i]); sort(all(v));v.erase(unique(all(v)),v.end()); int m=v.size();for(int i=0;i<2*m;i++)t[i]=1e9; upd(lb(v,0),m,1); for(int i=1;i<=n;i++){ ll cr=0;ans[i]=1e9; for(int j=30;j>=0;j--){ ll xx=((x>>j)&1); ll yy=((a[i]>>j)&1); if(xx)cr+=(yy^1)*(1<<j); else ans[i]=min(ans[i],qr(lb(v,cr+(yy^1)*(1<<j)),ub(v,cr+(yy^1)*(1<<j)+(1<<j)-1),m)); }ans[i]=min(ans[i],qr(lb(v,cr),ub(v,cr),m)); upd(lb(v,a[i]),m,i+1); }int mx=0,mem=0; for(int i=1;i<=n;i++){ if(ans[i]==1e9)continue; if(i-ans[i]+1>=mx){ mx=i-ans[i]+1; mem=i; } }cout<<n-mem+1<<' '<<mx; }
#Verdict Execution timeMemoryGrader output
Fetching results...