Pagini recente » Cod sursa (job #605382) | Cod sursa (job #560810) | Cod sursa (job #1207539) | Cod sursa (job #633920) | Cod sursa (job #429671)
Cod sursa(job #429671)
#include <iostream>
#define IN "datorii.in"
#define OUT "datorii.out"
#define Lg 15010
using namespace std;
int H[4*Lg], sir[Lg];
int semn, Poz, val;
int N, M, Sum, S, D;
void update(int nod, int st, int dr)
{
int mij;
if(st==dr)
H[nod]-=val;
else
{
mij=(st+dr)>>1;
if(Poz<=mij)
update(nod<<1,st,mij);
else
update((nod<<1)+1,mij+1,dr);
H[nod]=H[nod<<1]+H[(nod<<1)+1];
}
}
void build(int nod,int st,int dr)
{
int mij;
if(st==dr)
H[nod]=sir[st];
else
{
mij=(st+dr)>>1;
build(nod<<1,st,mij);
build((nod<<1)+1,mij+1,dr);
H[nod]=H[nod<<1]+H[(nod<<1)+1];
}
}
void citire()
{
cin>>N>>M;
semn=1;
for(Poz=1;Poz<=N;Poz++)
cin>>sir[Poz];
build(1,1,N);
}
void suma(int nod,int st,int dr)
{
int mij;
if(st>=S && dr<=D)
Sum+=H[nod];
else
{
mij=(st+dr)>>1;
if(mij>=S)
suma(nod<<1,st,mij);
if(mij<D)
suma((nod<<1)+1,mij+1,dr);
}
}
void solve()
{
int op;
for(int i=1;i<=M;i++)
{
cin>>op>>S>>D;
if(op)
{
Sum=0;
suma(1,1,N);
printf("%d\n",Sum);
}
else
{
Poz=S;
val=D;
update(1,1,N);
}
}
}
int main()
{
freopen (IN,"r",stdin);
freopen (OUT,"w",stdout);
citire();
solve();
return 0;
}