Submission #418437

#TimeUsernameProblemLanguageResultExecution timeMemory
418437Runtime_error_XOR (IZhO12_xor)C++14
0 / 100
10 ms2700 KiB
#include <bits/stdc++.h> #define mp make_pair #define ll long long using namespace std; const int inf = 25e4+9,lg = 32; ll n,k,a[inf],pre[inf]; pair<ll,ll> ans; struct Trie{ ll cnt = 0,MinIdx = inf; Trie *a[2] = {0}; Trie(){ cnt = 0,MinIdx = inf; a[0] = a[1] = NULL; } void insert(ll bit,ll num,ll idx){ cnt++; MinIdx = min(MinIdx,idx); if(bit == -1) return ; bool CurBit = num & (1ll<<bit); if(a[CurBit] == NULL) a[CurBit] = new Trie(); a[CurBit]->insert(bit-1,num,idx); } ll query(ll bit,ll PreXor){ if(cnt == 0 || bit == -1) return MinIdx; bool PreBit = PreXor & (1ll<<bit); bool KBit = k & (1ll<<bit); if(a[0] == NULL) a[0] = new Trie(); if(a[1] == NULL) a[1] = new Trie(); if(KBit == 0){ if(PreBit) return min(a[1]->query(bit-1,PreXor),a[0]->MinIdx); else return min(a[0]->query(bit-1,PreXor),a[1]->MinIdx); } else { if(PreBit) return a[0]->query(bit-1,PreXor); else return a[1]->query(bit-1,PreXor); } } }; Trie *root = new Trie(); signed main(){ scanf("%lld%lld",&n,&k); for(ll i=1;i<=n;i++){ scanf("%lld",a+i); pre[i] = pre[i-1]^a[i]; root->insert(lg,pre[i-1],i-1); ans = max(ans,mp(i - root->query(lg,pre[i]),i)); } printf("%lld %lld\n",ans.second-ans.first+1,ans.first); }

Compilation message (stderr)

xor.cpp: In function 'int main()':
xor.cpp:55:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   55 |     scanf("%lld%lld",&n,&k);
      |     ~~~~~^~~~~~~~~~~~~~~~~~
xor.cpp:57:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   57 |         scanf("%lld",a+i);
      |         ~~~~~^~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...