1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
| 带通求连续区间和 class Struct(): def __init__(self): self.left = 0 self.right = 0 self.sum = 0
def pushup(curNode): tr[curNode].sum = tr[curNode << 1].sum + tr[curNode << 1 | 1].sum
def build(curNode,L,R): if L == R: tr[curNode].left = L tr[curNode].right = R tr[curNode].sum = data[R] return tr[curNode].left = L tr[curNode].right = R
mid = L + R >> 1 build(curNode << 1,L,mid) build(curNode << 1 | 1,mid + 1,R) pushup(curNode)
def query(curNode,L,R): if tr[curNode].left >= L and tr[curNode].right <= R: return tr[curNode].sum mid = tr[curNode].left + tr[curNode].right >> 1
res = 0 if L <= mid: res += query(curNode << 1,L,R) if R > mid: res += query(curNode << 1 | 1,L,R) return res
def modify(curNode,x,v): if tr[curNode].left == tr[curNode].right: tr[curNode].sum += v return mid = tr[curNode].left + tr[curNode].right >> 1 if x <= mid: modify(curNode << 1,x,v) if x > mid: modify(curNode << 1 | 1,x,v)
pushup(curNode)
n,m = map(int,input().split()) data = [0] + [int(i) for i in input().split()]
tr = [Struct() for i in range(4 * n + 1)] build(1,1,n)
for i in range(m): k,a,b = map(int,input().split()) if k == 1: modify(1,a,b) else: print(query(1,a,b))
|