Pagini recente » Cod sursa (job #812590) | Cod sursa (job #418965) | Cod sursa (job #2233254) | Cod sursa (job #2705114) | Cod sursa (job #828270)
Cod sursa(job #828270)
#include<fstream>
using namespace std;
#define lmax 50000
int arbint[lmax];
int start,finish,val,poz,s,op;
int suma(int a, int b){
return(a+b);}
void actualizare(int nod,int st,int dr){
if(st==dr){
if(op==1)
arbint[nod]=val;
else
arbint[nod]=arbint[nod]-val;}//se actualizeaza astfel arborele in zilele in care clientii isi platesc din datorii
else{
int div=(st+dr)/2;
if(poz<=div)actualizare(2*nod,st,div);
else actualizare(2*nod+1,div+1,dr);
arbint[nod]=suma(arbint[2*nod],arbint[2*nod+1]);
}
}
void interogare(int nod, int st, int dr){
if(start<=st && dr<=finish){s+=arbint[nod];}
else{
int div=(st+dr)/2;
if(start<=div)interogare(2*nod,st,div);
if(div<finish)interogare(2*nod+1,div+1,dr);
}
}
int main(){
int a,b,i,n,m,x;
ifstream f("datorii.in");
ofstream g("datorii.out");
f>>n>>m;
op=1;
for(i=1;i<=n;i++){
f>>x;
poz=i;
val=x;
actualizare(1,1,n);}
op=0;
for(i=1;i<=m;i++){
f>>x>>a>>b;
if(x==0){poz=a;
val=b;
actualizare(1,1,n);}
else{
s=0;
start=a;
finish=b;
interogare(1,1,n);
g<<s<<'\n';}
}
f.close();
g.close();}