답안 #288400

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
288400 2020-09-01T13:15:44 Z topovik XORanges (eJOI19_xoranges) C++14
0 / 100
170 ms 3628 KB
#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;
        }
    }
}

Compilation message

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);
      |                                                                                        ~^~
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 384 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 3 ms 384 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 384 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 170 ms 3628 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 384 KB Output isn't correct
2 Halted 0 ms 0 KB -