이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
n, q = map(int, input().split())
A = list(map(int, input().split())) # scan results
A_pair = A[0::2]
A_impair = A[1::2]
prefixe = [0]
for x in A_pair:
prefixe.append(x ^ prefixe[-1])
arbre_pair = []
for k in range(1, len(A_pair)+1):
arbre_pair.append(
prefixe[k] ^ prefixe[k-(k & (-k))]
)
prefixe = [0]
for x in A_impair:
prefixe.append(x ^ prefixe[-1])
arbre_impair = []
for k in range(1, len(A_impair)+1):
arbre_impair.append(
prefixe[k] ^ prefixe[k-(k & (-k))]
)
def somme(k, arbre):
# Somme k premiers elts
s = 0
while k >= 1:
s ^= arbre[k-1]
k -= k & (-k)
return s
def ajouter(k, x, arbre):
# Ajoute x en position k
k += 1
while k <= len(arbre):
arbre[k-1] ^= x
k += k & (-k)
def xorsum(l, r):
assert l % 2 == r % 2
if l % 2 == 0:
# A_pair
l = l // 2
r = r // 2
return somme(r+1, arbre_pair) ^ somme(l, arbre_pair)
else:
# A_impair
l = l // 2
r = r // 2
return somme(r+1, arbre_impair) ^ somme(l, arbre_impair)
def set(i, j):
if i % 2 == 0:
# A_pair
i = i // 2
diff = A_pair[i] ^ j
A_pair[i] = j
ajouter(i, diff, arbre_pair)
else:
# A_impair
i = i // 2
diff = A_impair[i] ^ j
A_impair[i] = j
ajouter(i, diff, arbre_impair)
for _ in range(q):
q, i, j = map(int, input().split())
if q == 1:
# rescan
set(i-1, j)
else:
# query
if (j - i) % 2 == 1:
print(0)
else:
print(xorsum(i-1, j-1))
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |