Pagini recente » Cod sursa (job #2257777) | Cod sursa (job #2854090) | Cod sursa (job #1710156) | Cod sursa (job #202475) | Cod sursa (job #2439852)
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;
ifstream is("datorii.in");
ofstream os("datorii.out");
vector<int> tree;
int query(const int left, const int right, const int a, const int b, const int node) {
if (a >= left && b <= right) {
return tree[node];
}
const int md = a + ((b - a) >> 1);
int sum = 0;
if (left <= md)
sum = query(left, right, a, md, 2 * node);
if (md < right)
sum += query(left, right, md + 1, b, 2 * node + 1);
return sum;
}
void update(const int poz, const int val, const int a, const int b, const int node) {
if (a == b) {
tree[node] -= val;
return;
}
const int md = a + ((b - a) >> 1);
if (poz <= md) {
update(poz, val, a, md, 2 * node);
} else {
update(poz, val, md + 1, b, 2 * node + 1);
}
tree[node] -= val;
}
int main() {
int n, m, N;
is >> n >> m;
for (N = 1; N < n; N <<= 1);
tree = vector<int>(2 * N);
for (int i = 0; i < n; ++i) {
is >> tree[N + i];
}
for (int i = N - 1; i; --i) {
tree[i] = tree[2 * i] + tree[2 * i + 1];
}
int type, x, y;
while (m--) {
is >> type >> x >> y;
if (type == 0) {
// for (int i = N + x - 1; i; i >>= 1) {
// tree[i] -= y;
// }
update(x, y, 1, n, 1);
} else {
os << query(x, y, 1, n, 1) << "\n";
}
}
is.close();
os.close();
return 0;
}