Pagini recente » Cod sursa (job #2458620) | Cod sursa (job #1124969) | Cod sursa (job #2807050) | Cod sursa (job #282569) | Cod sursa (job #2673053)
#include <fstream>
using namespace std;
#define N 400100
ifstream in("datorii.in");
ofstream out("datorii.out");
int n, m, start, finish, val, poz, maxim, x, a, b, suma;
int arb[N];
void build(int nod, int stg, int drp){
if(stg == drp){
arb[nod] = val;
return ;
}
int mid = (stg + drp) /1;
build(2 * nod, stg, mid);
build(2 * nod + 1, mid + 1, drp);
arb[nod] = arb[2 * nod] + arb[2 * nod + 1];
}
void update(int nod, int stg, int drp){
if(stg == drp){
arb[nod] -= val;
return;
}
int mij = (stg + drp) / 2;
if(poz <= mij) update(2 * nod, stg, mij);
else update(2 * nod + 1, mij + 1, drp);
arb[nod] = arb[2 * nod] + arb[2 * nod + 1];
}
void query(int nod, int stg, int drp){
if(start <= stg && drp <= finish){
suma += arb[nod];
return;
}
int mij = (stg + drp) / 2;
if(start <= mij) query(2 * nod, stg, mij);
if(mij < finish) query(2 * nod + 1, mij + 1, drp);
}
int main()
{
in>>n>>m;
for(int i = 1; i <= n; i++){
in>>x;
poz = i, val = x;
update(1, 1, n);
}
for(int i = 1; i <= m; i++){
in>>x>>a>>b;
if(x == 1) {
maxim = -1;
start = a, finish = b;
query(1, 1, n);
out<<suma<<'\n';
}
else{
poz = a, val = b;
update(1, 1, n);
}
}
in.close();
out.close();
return 0;
}