Cod sursa(job #298420)

Utilizator socheoSorodoc Ionut socheo Data 6 aprilie 2009 02:12:31
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include<stdio.h>
#include<fstream.h>
int a[80000],n,m,i,sum;

void update(int nod,int l,int r,int poz,int val)
{ 
	if(l==r)
		a[nod]-=val;
	else {
		  int mij=(l+r)/2;
		  if(mij>=poz)
			   update(2*nod,l,mij,poz,val);
		  if(mij<poz)
			   update(2*nod+1,mij+1,r,poz,val);
		  a[nod]=a[2*nod]+a[2*nod+1];
	     }
}
void query(int nod,int l, int r,int st,int fin)
{ if(fin>=r&&st<=l)
	sum+=a[nod];
  else{ int mij=(l+r)/2;
        if(st<=mij)
			query(2*nod,l,mij,st,fin);
		if(mij<fin)
			query(2*nod+1,mij+1,r,st,fin);
       }
}
int main()
{  ifstream f("datorii.in");
   ofstream g("datorii.out");
   f>>n>>m;
   for(i=1;i<=n;i++)
	{ int x;
		f>>x;
        update(1,1,n,i,-x);
	}
for(i=1;i<=m;i++)
{ sum=0;
   int q,w,e;
  f>>q>>w>>e;
   if(q==0)
     update(1,1,n,w,e);
   if(q==1)
   { query(1,1,n,w,e);
     g<<sum<<"\n";
   }
}
	
return 0;}