Pagini recente » Cod sursa (job #3001501) | Cod sursa (job #139338) | Cod sursa (job #434298) | Cod sursa (job #3005460) | Cod sursa (job #433989)
Cod sursa(job #433989)
#include<cstdio>
#include<fstream>
using namespace std;
int n,m,ai[40000],a,b,val,poz,SUMA;
void adauga(int nod, int s, int d)
{
if(s==d) ai[nod]+=val;
else //if(nod<15000)
{
int m=(s+d)>>1;
ai[nod]+=val;
if(poz<=m) adauga(nod<<1,s,m);
else adauga((nod<<1)+1,m+1,d);
}
}
void scade(int nod,int s, int d)
{
if(s==d) ai[nod]-=val;
else //if(nod<15000)
{
int m=(s+d)>>1;
ai[nod]-=val;
if(poz<=m) scade(nod<<1,s,m);
else scade((nod<<1)+1,m+1,d);
}
}
void suma(int nod, int s, int d)
{
if(a<=s && d<=b) SUMA+=ai[nod];
else
{
int m=(s+d)>>1;
if(a<=m) suma((nod<<1),s,m);
if(b>m) suma((nod<<1)+1,m+1,d);
}
}
int main()
{
ifstream fin("datorii.in");
freopen("datorii.out","w",stdout);
fin>>n>>m;
int x;
for(int i=1; i<=n; ++i)
{
fin>>x;
val=x;
poz=i;
adauga(1,1,n);
}
for(int i=1; i<=m; ++i)
{
fin>>x>>a>>b;
if(x==0)
{
val=b;
poz=a;
scade(1,1,n);
}
else
{
SUMA=0;
suma(1,1,n);
printf("%d\n",SUMA);
}
}
return 0;
}