Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // icpc.me/2042
- #include <cstdio>
- typedef long long ll;
- int N, M, K;
- ll tree[4000005], a, b, c;
- ll update(int idx, int val, int node, int nodeLeft, int nodeRight) {
- if (idx < nodeLeft || idx > nodeRight) return tree[node];
- if (nodeLeft == nodeRight) return tree[node] = val;
- int mid = (nodeLeft + nodeRight) / 2;
- return tree[node] = update(idx, val, node * 2, nodeLeft, mid) + update(idx, val, node * 2 + 1, mid + 1, nodeRight);
- }
- ll read(int left, int right, int node, int nodeLeft, int nodeRight) {
- if (right < nodeLeft || left > nodeRight) return 0;
- if (left <= nodeLeft && nodeRight <= right) return tree[node];
- int mid = (nodeLeft + nodeRight) / 2;
- return read(left, right, node * 2, nodeLeft, mid) + read(left, right, node * 2 + 1, mid + 1, nodeRight);
- }
- int main() {
- scanf("%d %d %d", &N, &M, &K);
- for (int i = 0; i < N; i++) {
- scanf("%lld", &a);
- update(i, a, 1, 0, N - 1);
- }
- for (int i = 0; i < M + K; i++) {
- scanf("%lld %lld %lld", &a, &b, &c);
- if (a == 1) {
- update(b - 1, c, 1, 0, N - 1);
- }
- else {
- printf("%lld\n", read(b - 1, c - 1, 1, 0, N - 1));
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement