Pagini recente » Cod sursa (job #1841617) | Cod sursa (job #226912) | Cod sursa (job #2512095) | Cod sursa (job #1765037) | Cod sursa (job #89985)
Cod sursa(job #89985)
//BMC
#include<fstream.h>
ifstream fin("datorii.in");
ofstream fout("datorii.out");
struct nod{int sum,a,b; nod *st,*dr;};
nod* create(int a,int b)
{
nod *q;
q=new nod;
q->sum=0;
q->a=a;
q->b=b;
if(a==b) q->st=q->dr=0;
else
{
q->st=create(a,(a+b)/2);
q->dr=create((a+b)/2+1,b);
}
return q;
}
void change(int p,int v,nod *q)
{
q->sum+=v;
if(q->a!=q->b)
if(p>(q->a+q->b)/2) change(p,v,q->dr);
else change(p,v,q->st);
}
int afis(int x,int y, nod *q)
{
if(q->a==x&&y==q->b) return q->sum;
if(x> (q->a+q->b)/2) return afis(x,y,q->dr);
if(y<=(q->a+q->b)/2) return afis(x,y,q->st);
return afis(x,(q->a+q->b)/2,q->st) + afis((q->a+q->b)/2+1,y,q->dr);
}
int main()
{
int n,m,i,j,x,y,c;
nod *rad;
fin>>n>>m;
rad=create(1,n);
for(i=1;i<=n;i++)
{
fin>>c;
change(i,c,rad);
}
for(i=1;i<=m;i++)
{
fin>>c>>x>>y;
if(c==0) change(x,-y,rad);
else fout<<afis(x,y,rad)<<'\n';
}
return 0;
}