제출 #831113

#제출 시각아이디문제언어결과실행 시간메모리
831113yeediotXOR (IZhO12_xor)C++14
0 / 100
25 ms70804 KiB
#include<bits/stdc++.h> using namespace std; #define int long long #define F first #define S second #define all(x) x.begin(),x.end() #define pii pair<int,int> #define pb push_back #define sz(x) (int)(x.size()) #define chmin(x,y) x=min(x,y) #define chmax(x,y) x=max(x,y) #define vi vector<int> #define vp vector<pii> #define vvi vector<vi> const int mxn=3e5*30; int n,k; vector<int>a; int trie[mxn][2]; int mn[mxn]; int nxt=0; void input(){ cin>>n>>k; for(int i=0;i<n;i++){ int x; cin>>x; a.pb(x); } } void init(){ for(int i=0;i<mxn;i++){ mn[i]=8e18; } } vector<int>conv(int x){ vector<int>res; for(int i=0;i<30;i++){ res.pb(x>>i&1); } reverse(all(res)); return res; } void insert(vector<int>vec,int p){ int v=0; chmin(mn[v],p); for(int i=0;i<30;i++){ if(!trie[v][vec[i]])trie[v][vec[i]]=++nxt; v=trie[v][vec[i]]; chmin(mn[v],p); } } int q(vector<int>vec,int p){ int v=0; int res=-8e18; for(int i=0;i<30 and (!i or v);i++){ int need=(k>>29-i)&1; int bit=vec[i]; if(need==1)v=trie[v][1-bit]; else{ if(trie[v][1-bit])chmax(res,p-mn[trie[v][1-bit]]+1); v=trie[v][bit]; } } if(v)chmin(res,p-mn[v]+1); return res; } void solve(){ input(); init(); int prefix=0; int ans=-8e18; int p=0; insert(conv(0),0); for(int i=0;i<n;i++){ prefix^=a[i]; insert(conv(prefix),i); int x=q(conv(prefix),i); if(x>ans){ p=i-x+2; ans=x; } } cout<<p<<' '<<ans<<'\n'; } signed main(){ ios::sync_with_stdio(0); cin.tie(0);cout.tie(0); solve(); } /* input: */

컴파일 시 표준 에러 (stderr) 메시지

xor.cpp: In function 'long long int q(std::vector<long long int>, long long int)':
xor.cpp:55:24: warning: suggest parentheses around '-' inside '>>' [-Wparentheses]
   55 |         int need=(k>>29-i)&1;
      |                      ~~^~
#Verdict Execution timeMemoryGrader output
Fetching results...