Pagini recente » Cod sursa (job #1629767) | Cod sursa (job #123280) | Cod sursa (job #2742780) | Cod sursa (job #231349) | Cod sursa (job #1505356)
#include <fstream>
using namespace std;//test aint
int ARB[200000], N, M, a, b, c, pos, val, max1 = 0, start, finish;
void update(int nod, int left, int right){
if (left == right){
if (a==-1)ARB[nod] = val;
else if (!a) ARB[nod] -= val;
}
else{
int m = (left + right) / 2;
if (pos <= m)update(2 * nod, left, m);
else update(2 * nod + 1, m + 1, right);
ARB[nod] = ARB[2 * nod] + ARB[2 * nod + 1];
}
}
void q(int nod, int left, int right){
if (start <= left && right <= finish) max1 += ARB[nod];
else{
int m = (left + right) / 2;
if (start <= m) q(2 * nod, left, m);
if (m < finish) q(2 * nod + 1, m + 1, right);
}
}
int main(){
ofstream of("datorii.out");
ifstream f("datorii.in");
f >> N >> M;
a = -1;
for (int i = 1; i <= N; ++i){
f >> val;
pos = i;
update(1, 1, N);
}
for (int i = 0; i < M; ++i){
f >> a >> b >> c;
if (a == 0){
pos = b; val = c;
update(1, 1, N);
}
else{
start = b; finish = c;
max1 = 0;
q(1, 1, N);
of << max1 << "\n";
}
}
}