Pagini recente » Cod sursa (job #1135166) | Cod sursa (job #1853825) | Cod sursa (job #624769) | Cod sursa (job #348900) | Cod sursa (job #2106805)
#include <iostream>
#include <fstream>
#define N 15001
using namespace std;
ifstream in("datorii.in");
ofstream out("datorii.out");
typedef long long ll;
ll tree[4 * N];
int n, m, v[N];
void build_tree(int node = 1, int l = 1, int r = n) {
if (l == r) {
tree[node] = v[l];
return;
}
int m = (l + r) >> 1;
build_tree(node << 1, l, m);
build_tree((node << 1) | 1, m + 1, r);
tree[node] = tree[node << 1] + tree[(node << 1) | 1];
}
void update_tree(int p, int node = 1, int l = 1, int r = n) {
if (l == r) {
tree[node] = v[l];
return;
}
int m = (l + r) >> 1;
if (p <= m)
update_tree(p, node << 1, l, m);
else
update_tree(p, (node << 1) | 1, m + 1, r);
tree[node] = tree[node << 1] + tree[(node << 1) | 1];
}
ll query(int ql, int qr, int node = 1, int l = 1, int r = n) {
if (ql > r || qr < l)
return 0;
if (ql <= l && qr >= r)
return tree[node];
int m = (l + r) >> 1;
return query(ql, qr, node << 1, l, m) + query(ql, qr, (node << 1) | 1, m + 1, r);
}
int main() {
in >> n >> m;
for (int i = 1; i <= n; i++)
in >> v[i];
build_tree();
int x, y, z;
for (int i = 1; i <= m; i++) {
in >> x >> y >> z;
if (!x) {
v[y] -= z;
update_tree(y);
} else {
out << query(y, z) << "\n";
}
}
return 0;
}