Pagini recente » Borderou de evaluare (job #2116732) | Cod sursa (job #122848) | Cod sursa (job #521571) | Cod sursa (job #2821479) | Cod sursa (job #1043338)
#include<fstream>
#define lim 15002
using namespace std;
ifstream f("datorii.in");
ofstream g("datorii.out");
int v[lim],n,m,i,arb[3*lim],val,pos,a,b,op,suma,o;
void querry(int nod,int st,int dr) {
if(a<=st && b>=dr){
suma+=arb[nod];
}
else {
int mid=st+(dr-st)/2;
if(a<=mid)
querry(2*nod,st,mid);
if(b>mid)
querry(2*nod+1,mid+1,dr);
}
}
void update(int nod,int st,int dr,int op) {
if(st==dr) {
if(op==1)
arb[nod]-=val;
else
arb[nod]=val;
}
else {
int mid=st+(dr-st)/2;
if(pos<=mid){
update(2*nod,st,mid,op);
}
else{
update(2*nod+1,mid+1,dr,op);
}
arb[nod]=arb[2*nod]+arb[2*nod+1];
}
}
int main () {
f>>n>>m;
for(i=1;i<=n;++i) {
f>>v[i];
val=v[i];
pos=i;
update(1,1,n,0);
}
for(i=1;i<=m;++i){
f>>op>>a>>b;
if(!op){
pos=a;
val=b;
update(1,1,n,1);
}
else{
suma=0;
querry(1,1,n);
g<<suma<<"\n";
}
}
return 0;
}