Pagini recente » Cod sursa (job #1301062) | Cod sursa (job #19225) | Cod sursa (job #1243455) | Cod sursa (job #397840) | Cod sursa (job #3143956)
#include <bits/stdc++.h>
struct aib {
std::vector<int> bit;
int n;
aib(std::vector<int> &v) {
n = v.size();
bit.resize(n + 1, 0);
for (int i = 0; i < n; ++i) {
update(i, v[i]);
}
}
int64_t compute(int r) {
if (r == -1) {
return 0;
}
int64_t total_sum = 0;
while (r >= 0) {
total_sum += bit[r];
r = r & (r + 1);
r--;
}
return total_sum;
}
void update(int index, int value) {
for (int start = index; start <= n; start = (start | (start + 1))) {
bit[start] += value;
}
}
int64_t query(int l, int r) {
return compute(r) - compute(l);
}
};
int main() {
std::ifstream in("datorii.in");
std::ofstream out("datorii.out");
int n, m;
in >> n >> m;
std::vector<int> v(n);
for (int i = 0; i < n; ++i) {
in >> v[i];
}
aib bit = aib(v);
for (int i = 0; i < m; ++i) {
int query;
in >> query;
if (query == 0) {
int t, v;
in >> t >> v;
bit.update(t - 1, -v);
} else if (query == 1) {
int p, q;
in >> p >> q;
out << bit.query(p - 2, q - 1) << "\n";
}
}
in.close();
out.close();
return 0;
}