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 | #include<iostream> #include<vector> using namespace std; typedef long long ll; int n, m, k, a, segSize = 1; vector<ll> seg; ll b, c; void update(int idx, ll val) { idx += segSize; seg[idx] = val; while (idx > 1) { idx /= 2; seg[idx] = seg[idx * 2] + seg[idx * 2 + 1]; } } ll partSum(int L, int R, int nodeIdx, int nodeL, int nodeR) { if (nodeR < L || R < nodeL) return 0; if (L <= nodeL && nodeR <= R) return seg[nodeIdx]; int mid = (nodeL + nodeR) / 2; return partSum(L, R, nodeIdx * 2, nodeL, mid) + partSum(L, R, nodeIdx * 2 + 1, mid + 1, nodeR); } int main() { scanf("%d %d %d", &n, &m, &k); while (segSize < n) segSize *= 2; seg.resize(segSize * 2); for (int i = 0; i < n; i++) scanf("%lld", &seg[i + segSize]); for (int i = 0; i < n; i++) update(i, seg[i + segSize]); for (int i = 0; i < m + k; i++) { scanf("%d %lld %lld", &a, &b, &c); if (a == 1) update(b - 1, c); else if (a == 2) printf("%lld\n", partSum(b - 1, c - 1, 1, 0, segSize - 1)); } return 0; } | cs |
'Coding > Data Structure' 카테고리의 다른 글
유니온파인드(Union Find) (0) | 2019.01.20 |
---|---|
펜윅트리(이진 인덱스트리 : Binary Index Tree) (0) | 2019.01.20 |