Pagini recente » Cod sursa (job #2647685) | Cod sursa (job #3030707) | Borderou de evaluare (job #1567459) | Cod sursa (job #2955867) | Cod sursa (job #2401408)
#include <fstream>
int tree[1 << 15], n, m, pos, val, a, b;
void update(int p, int st, int dr) {
if (st == dr) tree[p] -= val;
else {
int m = (st + dr) / 2;
if (pos <= m) update(2 * p, st, m);
else update(2 * p + 1, m + 1, dr);
tree[p] = tree[2 * p] + tree[2 * p + 1];
}
}
int query(int p, int st, int dr) {
if (a <= st && dr <= b) return tree[p];
int m = (st + dr) / 2, r1 = 0, r2 = 0;
if (a <= m) r1 = query(2 * p, st, m);
if (m < b) r2 = query(2 * p + 1, m + 1, dr);
return r1 + r2;
}
int main() {
std::ifstream in("datorii.in");
std::ofstream out("datorii.out");
int i, x;
in >> n >> m;
for (pos = 1; pos <= n; ++pos) {
in >> val;
val = - val;
update(1, 1, n);
}
for (i = 0; i < m; ++i) {
in >> x >> a >> b;
if (x == 1) out << query(1, 1, n) << '\n';
else {
pos = a;
val = b;
update(1, 1, n);
}
}
return 0;
}