Pagini recente » Cod sursa (job #698387) | Cod sursa (job #155935) | Cod sursa (job #641137) | Cod sursa (job #3217158) | Cod sursa (job #116372)
Cod sursa(job #116372)
#include <iostream>
#include <fstream>
using namespace std;
int N(0),
M(0);
int bit[15001];
int mnem[15001];
int trailling_zeros(int n) {
if (0 == n)
return 0;
if (mnem[n] != 0)
return mnem[n];
int r(0);
for (int i(1); !(n & i); i <<= 1, ++r);
return mnem[n] = r;
}
void bit_mod_value(int pos, int dif) {
int i = pos;
while (i <= N) {
bit[i] += dif;
// i += 1<<trailling_zeros(i);
i += (i ^ (i-1)) & i;
}
}
int bit_1range_value(int end) {
if (end <= 0)
return 0;
int i = end;
int r(0);
while (i >= 1) {
r += bit[i];
// i -= 1<<trailling_zeros(i);
i -= (i ^ (i-1)) & i;
}
return r;
}
int bit_interval_value(int p, int q) {
return bit_1range_value(q) - bit_1range_value(p - 1);
}
int main(int argc, char *argv[]) {
FILE *fin = fopen("datorii.in", "r");
ofstream fout("datorii.out");
fscanf(fin, "%d %d", &N, &M);
int aux;
for (int i(1); i <= N; ++i) {
fscanf(fin, "%d", &aux);
// bit_mod_value(i, aux);
int j = i;
while (j <= N) {
bit[j] += aux;
// i += 1<<trailling_zeros(i);
j += (j ^ (j-1)) & j;
}
}
int a(0),
b(0),
c(0);
for (int i(0); i < M; ++i) {
fscanf(fin, "%d %d %d", &c, &a, &b);
if (1 == c) {
fout << bit_interval_value(a, b) << endl;
} else {
// bit_mod_value(a, -b);
b = -b;
int j = a;
while (j <= N) {
bit[j] += b;
// i += 1<<trailling_zeros(i);
j += (j ^ (j-1)) & j;
}
}
}
fout.close();
fclose(fin);
return 0;
}