제출 #288400

#제출 시각아이디문제언어결과실행 시간메모리
288400topovikXORanges (eJOI19_xoranges)C++14
0 / 100
170 ms3628 KiB
#include <bits/stdc++.h> #define f first #define s second #define pb push_back #define INF 1000000000 using namespace std; typedef long long ll; typedef long double ld; const ll oo = 1e12; const ll N = 1e6; ll a[N]; ll val[N][2]; ll n,q; void Build(ll l, ll r, ll posx, ll posy) { if (l==r) { if ((l<<1+posy-2)<n) val[posx][posy]=a[l<<1+posy-2]; return ; } ll mdl=(l+r)>>1; Build(l,mdl,posx<<1,posy); Build(mdl+1,r,posx<<1+1,posy); val[posx][posy]=val[posx<<1][posy]^val[posx<<1+1][posy]; } inline void Upd(ll l, ll r, ll nom, ll zn,ll posx, ll posy) { if (l>nom || r<nom) return ; if (l==r) {val[posx][posy]=zn;return;} ll mdl=(l+r)>>1; Upd(l,mdl,nom,zn,posx<<1,posy); Upd(mdl+1,r,nom,zn,posx<<1+1,posy); val[posx][posy]=val[posx<<1][posy]^val[posx<<1+1][posy]; } inline ll Sum(ll l, ll r, ll l1, ll r1, ll posx, ll posy) { if (l1>r1) return 0; if (l1==l && r1==r) return val[posx][posy]; ll mdl=(l+r)>>1; return Sum(l,mdl,l1,min(mdl,r1),posx<<1+1,posy)^Sum(mdl+1,r,max(mdl+1,l1),r1,posx<<1+1,posy); } int main() { cin>>n>>q; for (ll i=0; i<n; i++) cin>>a[i]; Build(1,(n+1)/2,1,0); Build(1,n/2,1,1); while (q>0) { q--; ll nom,x,y; cin>>nom>>x>>y; if (nom==1) Upd(1,(n+1)>>1,(x+1)>>1,y,1,(x+1)&1); else { if (!((y-x+1)&1)) cout<<0<<endl; else cout<<Sum(1,(n+1)>>1,(x+1)>>1,(y+1)>>1,1,(x+1)&1)<<endl; } } }

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

xoranges.cpp: In function 'void Build(ll, ll, ll, ll)':
xoranges.cpp:24:23: warning: suggest parentheses around '-' inside '<<' [-Wparentheses]
   24 |         if ((l<<1+posy-2)<n) val[posx][posy]=a[l<<1+posy-2];
      |                 ~~~~~~^~
xoranges.cpp:24:57: warning: suggest parentheses around '-' inside '<<' [-Wparentheses]
   24 |         if ((l<<1+posy-2)<n) val[posx][posy]=a[l<<1+posy-2];
      |                                                   ~~~~~~^~
xoranges.cpp:29:26: warning: suggest parentheses around '+' inside '<<' [-Wparentheses]
   29 |     Build(mdl+1,r,posx<<1+1,posy);
      |                         ~^~
xoranges.cpp:30:51: warning: suggest parentheses around '+' inside '<<' [-Wparentheses]
   30 |     val[posx][posy]=val[posx<<1][posy]^val[posx<<1+1][posy];
      |                                                  ~^~
xoranges.cpp: In function 'void Upd(ll, ll, ll, ll, ll, ll)':
xoranges.cpp:39:31: warning: suggest parentheses around '+' inside '<<' [-Wparentheses]
   39 |     Upd(mdl+1,r,nom,zn,posx<<1+1,posy);
      |                              ~^~
xoranges.cpp:40:51: warning: suggest parentheses around '+' inside '<<' [-Wparentheses]
   40 |     val[posx][posy]=val[posx<<1][posy]^val[posx<<1+1][posy];
      |                                                  ~^~
xoranges.cpp: In function 'll Sum(ll, ll, ll, ll, ll, ll)':
xoranges.cpp:48:44: warning: suggest parentheses around '+' inside '<<' [-Wparentheses]
   48 |     return Sum(l,mdl,l1,min(mdl,r1),posx<<1+1,posy)^Sum(mdl+1,r,max(mdl+1,l1),r1,posx<<1+1,posy);
      |                                           ~^~
xoranges.cpp:48:89: warning: suggest parentheses around '+' inside '<<' [-Wparentheses]
   48 |     return Sum(l,mdl,l1,min(mdl,r1),posx<<1+1,posy)^Sum(mdl+1,r,max(mdl+1,l1),r1,posx<<1+1,posy);
      |                                                                                        ~^~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...