Submission

Status:
PPxxxxxxxxxxxxxxxxxx

Score: 10

User: chawinkn

Problemset: ผลบวก (ยาก)

Language: cpp

Time: 0.002 second

Submitted On: 2024-11-25 20:48:02

#include <bits/stdc++.h>
using namespace std;

const int MAX_N = 1e5+9;
int n, tree[2*MAX_N];

int query(int l, int r) {
    int sum=0;
    for (l += n, r += n+1; l < r; l/=2, r/=2) {
        if (l&1) sum += tree[l++];
        if (r&1) sum += tree[--r];
    }
    return sum;
}

void update(int i, int v) {
    tree[i+=n] = v;
    for (i /= 2; i >= 1; i/=2) tree[i] = tree[2*i]+tree[2*i+1];
}

int main() {
    ios_base::sync_with_stdio(false); cin.tie(NULL);
    cin >> n;
	for (int i = 0; i < n; i++) {
		int a;
		cin >> a;
		update(i, a);
	}
	int q;
	cin >> q;
    while (q--) {
        int t, x, y;
		cin >> t;
		while (t--) {
			int i, j;
			cin >> i >> j;
			update(i, j);
		}
		cin >> x >> y;
		cout << query(x, y) << "\n";
    }
    return 0;
}