Pagini recente » Cod sursa (job #65568) | Cod sursa (job #2560076) | Cod sursa (job #233295) | Cod sursa (job #1508849) | Cod sursa (job #2228005)
#include <iostream>
#include <fstream>
#define N 15005
#define DEBUG() cout << "KEK!\n"
using namespace std;
ifstream in("datorii.in");
ofstream out("datorii.out");
int next(int index) {
return index + (index & -index);
}
int parent(int index) {
return index - (index & -index);
}
void update_BIT(int BIT[], int x, int index, int sz) {
while (index <= sz) {
BIT[index] += x;
index = next(index);
}
}
int get_interval(int BIT[], int index) {
int sum = 0;
while (index > 0) {
sum += BIT[index];
index = parent(index);
}
return sum;
}
void build_BIT(int v[], int BIT[], int sz) {
for (int i = 1; i <= sz; i++)
update_BIT(BIT, v[i], i, sz);
}
int main() {
int n, m, x, y, z, a[N], t[N];
in >> n >> m;
for (int i = 1; i <= n; i++)
in >> a[i];
build_BIT(a, t, n);
for (int i = 1; i <= m; i++) {
in >> x >> y >> z;
if (!x) {
update_BIT(t, -z, y, n);
} else {
out << get_interval(t, z) - get_interval(t, y - 1) << "\n";
}
}
return 0;
}