Mai intai trebuie sa te autentifici.
Cod sursa(job #719432)
Utilizator | Data | 21 martie 2012 19:57:19 | |
---|---|---|---|
Problema | Datorii | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 1.33 kb |
#include <fstream>
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
int poz,val,start,finish,suma;
int dat[70000];
void act(int nod,int st,int dr){if(st==dr)dat[nod]=val;
else {int m;
m=(st+dr)/2;
if(poz<=m)act(2*nod,st,m);
else act(2*nod+1,m+1,dr);
dat[nod]=dat[nod*2]+dat[nod*2+1];
}
}
void inter(int nod,int st,int dr){if(start<=st&&dr<=finish)suma+=dat[nod];
else {int m;m=(st+dr)/2;
if(start<=m)inter(2*nod,st,m);
if(finish>m)inter(2*nod+1,m+1,dr);
}
}
int main()
{int n,m,x,a,b,i;
fin>>n>>m;
for(i=1;i<=n;i++)
{fin>>val;
poz=i;
act(1,1,n);
}
for(i=1;i<=m;i++)
{fin>>x;fin>>a;fin>>b;
if(x==0){poz=a;val=b;
act(1,1,n);
}
else{suma=0;
start=a;finish=b;
inter(1,1,n);
fout<<suma<<"\n";}
}
return 0;
}