結果
| 問題 | 
                            No.1641 Tree Xor Query
                             | 
                    
| コンテスト | |
| ユーザー | 
                             | 
                    
| 提出日時 | 2022-09-22 12:11:35 | 
| 言語 | Python3  (3.13.1 + numpy 2.2.1 + scipy 1.14.1)  | 
                    
| 結果 | 
                             
                                AC
                                 
                             
                            
                         | 
                    
| 実行時間 | 2,985 ms / 5,000 ms | 
| コード長 | 1,183 bytes | 
| コンパイル時間 | 174 ms | 
| コンパイル使用メモリ | 12,800 KB | 
| 実行使用メモリ | 60,596 KB | 
| 最終ジャッジ日時 | 2024-12-22 04:47:52 | 
| 合計ジャッジ時間 | 10,026 ms | 
| 
                            ジャッジサーバーID (参考情報)  | 
                        judge3 / judge5 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 3 | 
| other | AC * 18 | 
ソースコード
import sys
sys.setrecursionlimit(1000000)
n,q=map(int,input().split())
c=list(map(int,input().split()))
def init(n):
    global seg
    global N
    N=1
    while N < n:
        N <<= 1
    seg=[0]*(N + N-1)
def query(l, r):
    return _query(l, r, 0, 0, N)
def _query(l, r, i, L, R):
    if l <= L and R <= r:
        return seg[i]
    if R<=l or r <= L:
        return 0
    m=(L+R)//2
    v1 = _query(l, r, i*2+1,L, m)
    v2 = _query(l, r, i*2+2, m, R)
    return v1 ^ v2
def update(i,x):
    j=i + N-1
    seg[j]^=x
    while j > 0:
        j = (j - 1) // 2
        seg[j] = seg[j*2+1]^seg[j*2+2]
    
def rec(v, p, vs, g, l , r):
    l[v]=len(vs)
    vs.append(v)
    for nv in g[v]:
        if nv == p:
            continue
        rec(nv, v, vs, g, l, r)
    r[v]=len(vs)
g=  [[] for _ in range(n)]
for _ in range(n-1):
    a,b=map(lambda x: int(x)-1, input().split())
    g[a].append(b)
    g[b].append(a)
vs = []
l = [0]*n
r = [0]*n
rec(0, -1, vs, g, l, r)
init(len(vs))
for i in range(len(vs)):
    update(i, c[vs[i]])
for _ in range(q):
    t, x, y = map(int, input().split())
    x-=1
    if t==1:
        update(l[x], y)
    else:
        print(query(l[x], r[x]))