Pagini recente » Cod sursa (job #339825) | Cod sursa (job #1526880) | Cod sursa (job #783978) | Cod sursa (job #118181) | Cod sursa (job #2244755)
#include <iostream>
#include <fstream>
const int MAXN = 4e5 + 5;
using namespace std;
ifstream in("datorii.in");
ofstream out("datorii.out");
int tree[MAXN],v[MAXN],n,q;
void update(int pos,int value,int nod = 1,int left = 1,int right = n){
if(left == right){
if(!tree[nod])
tree[nod] = value;
else
tree[nod] -= value;
return;
}
int mid = (right + left) / 2;
if(pos <= mid)
update(pos,value,nod * 2,left,mid);
else
update(pos,value,nod * 2 + 1,mid + 1,right);
tree[nod] = tree[nod * 2] + tree[nod * 2 + 1];
}
int query(int qa,int qb,int nod = 1,int left = 1,int right = n){
if(qa <= left && right <= qb)
return tree[nod];
if(right < qa || qb < left)
return 0;
int mid = (left + right) / 2;
return query(qa,qb,nod * 2,left,mid) + query(qa,qb,nod * 2 + 1,mid + 1,right);
}
int main()
{
in>>n>>q;
for(int i = 1; i <= n; i++){
in>>v[i];
update(i,v[i]);
}
for(int i = 1; i <= q; i++){
int type,a,b;
in>>type>>a>>b;
if(!type){
update(a,b);
}
else
out<<query(a,b)<<"\n";
}
return 0;
}