본문 바로가기

카테고리 없음

[백준 12844번] XOR (Python3)

import sys
input = sys.stdin.readline

def make(s,e,x):
  if s==e:
    seg[x] = seq[s]
  else:
    mid = (s+e)//2
    seg[x] = make(s,mid,x*2)^make(mid+1,e,x*2+1)
  return seg[x]

def update(i,j,v,s,e,x):
  if (j-i+1)%2:
    seg[x] ^= v
  if (e-s+1)%2:
    seg[x] ^= lazy[x]
  if s!=e:
    lazy[x*2] ^= lazy[x]; lazy[x*2+1] ^= lazy[x]
  lazy[x] = 0
  if i==s and j==e:
    if s!=e:
      lazy[x*2] ^= v; lazy[x*2+1] ^= v
    return seg[x]
  mid = (s+e)//2
  if j<=mid:
    return update(i,j,v,s,mid,x*2)
  if i>mid:
    return update(i,j,v,mid+1,e,x*2+1)
  return update(i,mid,v,s,mid,x*2)^update(mid+1,j,v,mid+1,e,x*2+1)    

N = int(input())
seq = [*map(int,input().split())]
seg = [0]*4*N; lazy = [0]*4*N
make(0,N-1,1)
for _ in range(int(input())):
  q,*a = map(int,input().split())
  if q==1:
    update(*a,0,N-1,1)
  else:
    print(update(*a,0,0,N-1,1))

= 구간 합 구하기 2 [백준 10999번] 구간 합 구하기 2 (Python3) (tistory.com)

레이지 세그 기본문제이다.

 

더하기가 XOR로 바뀌었다는 점만 다르고 나머지는 똑같다고 보면 된다.