Pagini recente » Cod sursa (job #2495751) | Cod sursa (job #578314) | Profil M@2Te4i | Profil Patoka | Cod sursa (job #792783)
Cod sursa(job #792783)
#include <cstdio>
#include <iostream>
using namespace std;
int val,poz,a,b;
int arb[600005];
int S,semn;
void update(int nod,int left,int right)
{
if(left==right)
{
arb[nod]+=val*semn;
return;
}
int mij=(left+right)/2;
if(poz<=mij) update(2*nod,left,mij);
else update(2*nod+1,mij+1,right);
arb[nod]=arb[2*nod]+arb[2*nod+1];
return;
}
void query(int nod,int left,int right)
{
if(left>=a && right<=b)
{
S+=arb[nod];
return;
}
int mij=(left+right)/2;
if(a<=mij) query(2*nod,left,mij);
if(b>mij) query(2*nod+1,mij+1,right);
return;
}
int main()
{
int n,m,nr,tip;
freopen("datorii.in","r",stdin);
freopen("datorii.out","w",stdout);
scanf("%d %d",&n,&m);
for(int i=1;i<=n;i++)
{
scanf("%d",&nr);
val=nr;
poz=i;
semn=1;
update(1,1,n);
}
for(int i=1;i<=m;i++)
{
scanf("%d %d %d",&tip,&a,&b);
if(tip==0)
{
poz=a;
val=b;
semn=-1;
update(1,1,n);
}
else
{
S=0;
query(1,1,n);
printf("%d\n",S);
}
}
return 0;
}