Pagini recente » Cod sursa (job #2372532) | Cod sursa (job #1167417) | Cod sursa (job #2740850) | Cod sursa (job #17267) | Cod sursa (job #2755322)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("datorii.in");
ofstream g("datorii.out");
int n, m, arbore[400000], poz, val, start, finish, maxim;
void update(int nod, int st, int dr)
{
if(st == dr){
arbore[nod] += val;
return;
}
int mij = (st + dr) / 2;
if(poz <= mij)update(2 * nod, st, mij);
else update(2 * nod + 1, mij + 1, dr);
arbore[nod] = arbore[nod * 2] + arbore[nod * 2 + 1];
}
int query(int nod, int st, int dr)
{
if(start <= st && dr <= finish){
return arbore[nod];
}
int mij = (st + dr) / 2;
int s1 = 0, s2 = 0;
if(start <= mij) s1 = query(2 * nod, st, mij);
if(mij < finish) s2 = query(2 * nod + 1, mij + 1, dr);
return s1 + s2;
}
int main()
{
int x, y, c;
f >> n >> m;
for(int i = 1; i <= n ; i++){
f >> x;
poz = i;
val = x;
update(1, 1, n);
}
for(int i = 1; i <= m; i++){
f >> c >> x >> y;
if(c == 1){
start = x;
finish = y;
g << query(1, 1, n) << '\n';
}
else{
poz = x;
val = -y;
update(1, 1, n);
}
}
return 0;
}