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 | #include<iostream> using namespace std; typedef long long ll; int N, M, K; ll A[1000005], tree[1000005]; void update(int idx, ll diff) { while (idx <= N) { tree[idx] += diff; idx += (idx & -idx); } } ll sumQ(int idx) { ll ans = 0; while (idx > 0) { ans += tree[idx]; idx -= (idx & -idx); } return ans; } int main() { scanf("%d%d%d", &N, &M, &K); for (int i = 1; i <= N; i++) { scanf("%lld", &A[i]); update(i, A[i]); } for (int i = 0; i < M + K; i++) { ll a; scanf("%lld", &a); if (a == 1) { int b; ll c; scanf("%d%lld", &b, &c); ll diff = c - A[b]; A[b] = c; update(b, diff); } else if (a == 2) { int b, c; scanf("%d%d", &b, &c); printf("%lld\n", sumQ(c) - sumQ(b-1)); } } return 0; } | cs |
'Coding > Data Structure' 카테고리의 다른 글
유니온파인드(Union Find) (0) | 2019.01.20 |
---|---|
세그먼트트리(Segment Tree) (0) | 2019.01.20 |