Pagini recente » Cod sursa (job #3229326) | Cod sursa (job #2490608) | Cod sursa (job #3233924) | Cod sursa (job #389107) | Cod sursa (job #1394457)
#include <fstream>
#include <vector>
using namespace std;
vector<int> vec;
int n;
void update (int zi, int val) {
int k;
k = 0;
while (zi <= n) {
vec[zi] -= val;
while (!(zi&(1<<k)))
k++;
zi = zi + (1<<k);
k++;
}
}
void updatesum (int zi, int val) {
int k;
k = 0;
while (zi <= n) {
vec[zi] += val;
while (!(zi&(1<<k)))
k++;
zi = zi + (1<<k);
k++;
}
}
int query (int zi) {
int sum = 0, k = 0;
while (zi) {
sum += vec[zi];
while (!(zi&(1<<k)))
k++;
zi = zi - (1<<k);
}
return sum;
}
int main () {
int m, x, y, z, i, a, b;
ifstream in ("datorii.in");
in >> n >> m;
vec.push_back(0);
for (i = 1; i <= n; i++)
vec.push_back(0);
for (i = 1; i <= n; i++) {
in >> x;
updatesum (i, x);
}
ofstream out ("datorii.out");
for (i = 1; i <= m; i++) {
in >> x >> y >> z;
if (x == 0)
update(y, z);
else {
a = query (z);
b = query (y-1);
a -= b;
out << a << '\n';
}
}
in.close();
out.close();
return 0;
}