Pagini recente » Cod sursa (job #1901646) | Cod sursa (job #250737) | Cod sursa (job #1653633) | Cod sursa (job #774402) | Cod sursa (job #2289511)
#include <fstream>
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
int n, m;
int tree[100005];
void update(int nodeIndex, int start, int end, int idx, int value) {
if (start == end) {
tree[nodeIndex] += value;
} else {
int mid = (start + end) / 2;
if (start <= idx and idx <= mid) {
update(2*nodeIndex, start, mid, idx, value);
} else {
update(2*nodeIndex + 1, mid + 1, end, idx, value);
}
tree[nodeIndex] = tree[2*nodeIndex] + tree[2*nodeIndex + 1];
}
}
int query(int nodeIndex, int start, int end, int l, int r) {
if (r < start or end < l) {
return 0;
}
if (l <= start and end <= r) {
return tree[nodeIndex];
}
int mid = (start + end) / 2;
return (query(2*nodeIndex, start, mid, l, r) + query(2*nodeIndex + 1, mid + 1, end, l, r));
}
int main() {
fin >> n >> m;
for (int i = 1; i <= n; i++) {
int temp;
fin >> temp;
update(1, 1, n, i, temp);
}
int cod;
for (int i = 1; i <= m; i++) {
fin >> cod;
if (cod) {
int p, q;
fin >> p >> q;
fout << query(1, 1, n, p, q) << endl;
} else {
int t, v;
fin >> t >> v;
update(1, 1, n, t, -v);
}
}
return 0;
}