Pagini recente » Cod sursa (job #1850803) | Cod sursa (job #2928887) | Cod sursa (job #1598160) | Cod sursa (job #1629586) | Cod sursa (job #1357559)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream in("datorii.in");
ofstream out("datorii.out");
const int Nmax = 15005;
const int tree_size = 32768;
int n, m;
int values[Nmax];
int tree[tree_size];
int position, value, result;
int op, a, b;
void update(int node, int l, int r) {
if (l == r)
tree[node] -= value;
else {
int m = (l + r) >> 1;
if (position <= m) update(node << 1, l, m);
else update((node << 1) + 1, m + 1, r);
tree[node] = tree[node << 1] + tree[(node << 1) + 1];
}
}
void query(int node, int l, int r) {
if (a <= l && r <= b)
result += tree[node];
else {
int m = (l + r) >> 1;
if (a <= m) query(node << 1, l, m);
if (b > m) query((node << 1) + 1, m + 1, r);
}
}
void construct(int node, int l, int r) {
if (l == r)
tree[node] = values[l];
else {
int m = (l + r) >> 1;
construct(node << 1, l, m);
construct((node << 1) + 1, m + 1, r);
tree[node] = tree[node << 1] + tree[(node << 1) + 1];
}
}
int main() {
in >> n >> m;
for (int i = 1; i <= n; ++i)
in >> values[i];
construct(1, 1, n);
for (int i = 1; i <= m; ++i) {
in >> op >> a >> b;
if (op == 0) {
position = a;
value = b;
update(1, 1, n);
}
else {
result = 0;
query(1, 1, n);
out << result << '\n';
}
}
return 0;
}