Pagini recente » Cod sursa (job #1596407) | Cod sursa (job #2302432) | Cod sursa (job #1625959) | Cod sursa (job #2585472) | Cod sursa (job #1761077)
// Copyright 2016 Silviu-Emil Popescu
#include <fstream>
#include <vector>
#define zeros(x) ((x) & ((x) - 1) ^ (x))
using std::ifstream;
using std::ofstream;
using std::vector;
void update(vector<int>* _aib, size_t pos, int val) {
vector<int>& aib = *_aib;
for (; pos < aib.size(); pos += zeros(pos)) {
aib[pos] += val;
}
}
int query(const vector<int>& aib, size_t pos) {
int ans = 0;
for (; pos > 0; pos -= zeros(pos)) {
ans += aib[pos];
}
return ans;
}
int main() {
vector<int> aib;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
int n, m;
fin >> n >> m;
aib.resize(n + 1);
for (int i = 1; i <= n; ++i) {
int val;
fin >> val;
update(&aib, i, val);
}
for (int iter = 0; iter < m; ++iter) {
int choice, a, b;
fin >> choice >> a >> b;
switch (choice) {
case 1:
fout << query(aib, b) - query(aib, a - 1) << "\n";
break;
case 0:
update(&aib, a, -b);
break;
}
}
return 0;
}