Pagini recente » Cod sursa (job #1088846) | Cod sursa (job #534259) | Cod sursa (job #1766633) | Cod sursa (job #1346007) | Cod sursa (job #1347041)
#include <fstream>
#define NMAX 15006
using namespace std ;
ifstream f("datorii.in") ;
ofstream g("datorii.out") ;
int SumaEle [4*NMAX +69] ;
int n,m,pos,val,suma ;
int a,b,start,finish ;
void Update(int nod,int left,int right)
{
int mij ;
if(left==right)
{
SumaEle[nod]-=val ;
return ;
}
mij=(left+right)/2 ;
if(pos<=mij)
Update(2*nod,left,mij) ;
else
Update(2*nod+1,mij+1,right) ;
SumaEle[nod]=SumaEle[2*nod] + SumaEle[2*nod+1] ;
}
void Init(int nod,int left,int right)
{
int mij ;
if(left==right)
{
SumaEle[nod]=val ;
return ;
}
mij=(left+right)/2 ;
if(pos<=mij)
Init(2*nod,left,mij) ;
else
Init(2*nod+1,mij+1,right) ;
SumaEle[nod]=SumaEle[2*nod] + SumaEle[2*nod+1] ;
}
void Query(int nod,int left,int right)
{
int mij ;
if(start<=left&&right<=finish)
{
suma+=SumaEle[nod] ;
return ;
}
mij=(left+right)/2 ;
if(start<=mij)
Query(2*nod,left,mij) ;
if(mij<finish)
Query(2*nod+1,mij+1,right) ;
}
int main()
{
int x,cod ;
f>>n>>m ;
for(int i=1;i<=n;i++)
{
f>>x ;
pos=i ;
val=x ;
Init(1,1,n) ;
}
for(int i=1;i<=m;i++)
{
f>>cod>>a>>b ;
if(cod==0)
{
pos=a ;
val=b ;
Update(1,1,n) ;
}
else
{
start=a ;
finish=b ;
suma=0 ;
Query(1,1,n) ;
g<<suma<<'\n' ;
}
}
return 0 ;
}