Pagini recente » Cod sursa (job #948994) | Cod sursa (job #2896100) | Cod sursa (job #2507895) | Cod sursa (job #1463806) | Cod sursa (job #116352)
Cod sursa(job #116352)
#include <iostream>
#include <fstream>
using namespace std;
int N(0),
M(0);
int A[15001];
int bst[15001];
int trailling_zeros(int n) {
if (0 == n)
return 0;
int r(0);
for (int i(1); !(n & i); i <<= 1, ++r);
return r;
}
void bst_mod_value(int pos, int dif) {
int i = pos;
while (i <= N) {
bst[i] += dif;
i += 1<<trailling_zeros(i);
}
}
void build_bst() {
for (int i(1); i <= N; ++i)
bst_mod_value(i, A[i]);
}
int bst_1range_value(int end) {
if (end <= 0)
return 0;
int i = end;
int r(0);
while (i >= 1) {
r += bst[i];
i -= 1<<trailling_zeros(i);
}
return r;
}
int bst_interval_value(int p, int q) {
return bst_1range_value(q) - bst_1range_value(p - 1);
}
int main(int argc, char *argv[]) {
ifstream fin("datorii.in");
ofstream fout("datorii.out");
fin >> N >> M;
for (int i(1); i <= N; ++i)
fin >> A[i];
build_bst();
int a(0),
b(0),
c(0);
for (int i(0); i < M; ++i) {
fin >> c >> a >> b;
if (1 == c) {
fout << bst_interval_value(a, b) << endl;
} else {
bst_mod_value(a, -b);
}
}
fout.close();
fin.close();
return 0;
}