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로 바뀌었다는 점만 다르고 나머지는 똑같다고 보면 된다.