Loading...
Submission
# When Author Problem Language CPU Memory
3656 2021-12-25 18:26:40 ewu_ieee21_user_34 Find MinMaxXoR Number C++ 11 1123 ms 39604 kb Time Limit Exceeded - 10
Test Cases
# CPU Memory Points
1 22 ms 34668 kb 1 Accepted
2 22 ms 34608 kb 1 Accepted
3 22 ms 34620 kb 1 Accepted
4 22 ms 34736 kb 1 Accepted
5 23 ms 34648 kb 1 Accepted
6 28 ms 34668 kb 1 Accepted
7 60 ms 35264 kb 1 Accepted
8 46 ms 35300 kb 1 Accepted
9 296 ms 39604 kb 1 Accepted
10 1123 ms 660 kb 0 Time Limit Exceeded
11 0 ms 0 kb 0 Skipped
12 0 ms 0 kb 0 Skipped
13 0 ms 0 kb 0 Skipped
14 0 ms 0 kb 0 Skipped
15 0 ms 0 kb 0 Skipped
16 0 ms 0 kb 0 Skipped
Source Code
  1. #include<bits/stdc++.h>
  2. #include<ext/pb_ds/assoc_container.hpp>
  3. #include<ext/pb_ds/tree_policy.hpp>
  4. using namespace std;
  5. using namespace __gnu_pbds;
  6.  
  7. template <typename num_t>
  8. using ordered_set = tree<num_t,null_type,less<num_t>,rb_tree_tag,tree_order_statistics_node_update>;
  9.  
  10. const int DEBUGGER = 0;
  11.  
  12. #define io ios_base::sync_with_stdio(0); cin.tie(NULL)
  13. #define mset(a,v) memset(a,v,sizeof(a))
  14. #define lp(i,a,n) for(int i=a;i<n;i++)
  15. #define lpr(i,a,n) for(int i=n-1;i>=a;i--)
  16. #define stlp(it,stl) for(__typeof(stl.begin()) it=stl.begin();it!=stl.end();it++)
  17. #define stlpr(it,stl) for(__typeof(stl.rbegin()) it=stl.rbegin();it!=stl.rend();it++)
  18. #define r(a) a.begin(),a.end()
  19. #define II ({ ll TEMP; cin>>TEMP; TEMP; })
  20. #define SI ({ string TEMP; cin>>TEMP; TEMP; })
  21. #define AI(a) ({ int n=sizeof(a)/sizeof(a[0]); lp(I,0,n)a[I]=II; })
  22. #define AO(a) ({ int n=sizeof(a)/sizeof(a[0]); lp(I,0,n){cout<<(I?" ":"")<<a[I];} if(DEBUGGER)cout<<endl;else cout<<'\n'; })
  23. #define VI(v) ({ lp(I,0,v.size())v[I]=II; })
  24. #define VO(v) ({ lp(I,0,v.size()){cout<<(I?" ":"")<<v[I];} if(DEBUGGER)cout<<endl;else cout<<'\n'; })
  25. #define outa(a) ({ if(DEBUGGER)dbg(a); else cout<<a<<'\n'; })
  26. #define dbg(a) ({ if(DEBUGGER)cout<<#a<<" = "<<a<<endl; })
  27. #define cbit(n,p) ((n)&(1LL<<(p)))
  28. #define sbit(n,p) ((n)|(1LL<<(p)))
  29. #define tbit(n,p) ((n)^(1LL<<(p)))
  30. #define F first
  31. #define S second
  32.  
  33. typedef long long ll;
  34. typedef pair<ll,ll> pll;
  35. typedef vector<ll> vl;
  36.  
  37. const ll MAX = 5e5+5;
  38. const ll MAX2= 1e6+6;
  39. const ll MOD = 1e9+7;
  40. const ll INF = 9e18;
  41. const double PI = 3.141592653589793238462;
  42. ll addM(ll a,ll b){return (a+=b)>=MOD?(a-=MOD):a;}
  43. ll subM(ll a,ll b){return (a-=b)<0?(a+=MOD):a;}
  44.  
  45. ll n,a[MAX],mxvis[2][2][MAX2];
  46. pll trN[4*MAX];
  47.  
  48. void combine(pll &trP,pll &trL,pll &trR){
  49. trP={max(trL.F,trR.F),min(trL.S,trR.S)};
  50. }
  51.  
  52. void init(int n,int l,int r){
  53. if(l==r) return void(trN[n]={a[l],a[l]});
  54. int m=(l+r)/2;
  55. init(2*n,l,m);
  56. init(2*n+1,m+1,r);
  57. combine(trN[n],trN[2*n],trN[2*n+1]);
  58. }
  59.  
  60. ll query(int n,int l,int r,int i,int j,int c,int d,ll val,ll ix){
  61. if(j<i) return 0;
  62. if(j<l || r<i) return -1;
  63. if(i<=l && r<=j){
  64. if(trN[n].S>=val && c==0 && d==0 && mxvis[c][d][val]>ix)return r-l+1;
  65. if(trN[n].S>val && c==0 && d==0 && mxvis[c][d][val]<ix)return r-l+1;
  66. if(trN[n].S>=val && c==0 && d==1 && mxvis[c][d][val]<ix)return r-l+1;
  67. if(trN[n].S>val && c==0 && d==1 && mxvis[c][d][val]>ix)return r-l+1;
  68.  
  69. if(trN[n].F<=val && c==1 && d==0 && mxvis[c][d][val]>ix)return r-l+1;
  70. if(trN[n].F<val && c==1 && d==0 && mxvis[c][d][val]<ix)return r-l+1;
  71. if(trN[n].F<=val && c==1 && d==1 && mxvis[c][d][val]<ix)return r-l+1;
  72. if(trN[n].F<val && c==1 && d==1 && mxvis[c][d][val]>ix)return r-l+1;
  73.  
  74. // if(trN[n].F<=val && c==1 && d==0 && mxvis[c][d][val]<a[i])return r-l+1;
  75. // if(trN[n].F<val && c==1 && d==0 && mxvis[c][d][val]>a[i])return r-l+1;
  76. // if(trN[n].F<=val && c==1 && d==1 && mxvis[c][d][val]<ix)return r-l+1;
  77. // if(trN[n].F<val && c==1 && d==1 && mxvis[c][d][val]>a[i])return r-l+1;
  78. if(l==r) return 0;
  79. }
  80. int m=(l+r)/2;
  81. ll trQL=0,trQR=0;
  82. if(d==0){
  83. trQR=query(2*n+1,m+1,r,i,j,c,d,val,ix);
  84. if(trQR==min(r,j)-max(m+1,i)+1 || trQR==-1)
  85. trQL=query(2*n,l,m,i,j,c,d,val,ix);
  86. }
  87. else{
  88. trQL=query(2*n,l,m,i,j,c,d,val,ix);
  89. if(trQL==min(m,j)-max(l,i)+1 || trQL==-1)
  90. trQR=query(2*n+1,m+1,r,i,j,c,d,val,ix);
  91. }
  92. trQL=max(trQL,0LL);
  93. trQR=max(trQR,0LL);
  94. return trQL+trQR;
  95. }
  96.  
  97. void solve(){
  98. lp(i,0,MAX2)
  99. mxvis[0][0][i]=INF,
  100. mxvis[1][0][i]=INF,
  101. mxvis[0][1][i]=-1,
  102. mxvis[1][1][i]=-1;
  103. n=II;
  104. lp(i,1,n+1)a[i]=II;
  105. init(1,1,n);
  106. ll ans=0;
  107. lp(i,1,n+1){
  108. ll minleftsz=query(1,1,n,1,i-1,0,0,a[i],i);
  109. ll minrightsz=query(1,1,n,i+1,n,0,1,a[i],i);
  110.  
  111. ll maxleftsz=query(1,1,n,1,i-1,1,0,a[i],i);
  112. ll maxrightsz=query(1,1,n,i+1,n,1,1,a[i],i);
  113.  
  114. // mxvis[0][1][a[i]]=i+minrightsz;
  115. // mxvis[0][0][a[i]]=i-minleftsz;
  116. //
  117. // mxvis[1][1][a[i]]=i+maxrightsz;
  118. // mxvis[1][0][a[i]]=i-maxleftsz;
  119.  
  120. mxvis[0][1][a[i]]=i;
  121. mxvis[0][0][a[i]]=i;
  122.  
  123. mxvis[1][1][a[i]]=i;
  124. mxvis[1][0][a[i]]=i;
  125.  
  126. ll minsubarrsz=(minleftsz+1)*(minrightsz+1)-1;
  127. if(minsubarrsz&1)ans^=a[i];
  128.  
  129. ll maxsubarrsz=(maxleftsz+1)*(maxrightsz+1)-1;
  130. if(maxsubarrsz&1)ans^=a[i];
  131.  
  132. dbg(minleftsz<<' '<<minrightsz<<' '<<maxleftsz<<' '<<maxrightsz<<' '<<a[i]);
  133. dbg(minsubarrsz<<' '<<maxsubarrsz);
  134. }
  135. outa(ans);
  136. }
  137.  
  138. int main(void){
  139. io;
  140. int multipletest=0;
  141. if(multipletest){
  142. int tc;
  143. cin>>tc;
  144. while(tc--)
  145. solve();
  146. }
  147. else
  148. solve();
  149. return 0;
  150. }
  151.