Pagini recente » Cod sursa (job #2535863) | Cod sursa (job #751231) | Cod sursa (job #2194300) | Cod sursa (job #806350) | Cod sursa (job #235271)
Cod sursa(job #235271)
#include <stdio.h>
#define nmax 15005
#define mmax 100005
int n, m, poz, val, f, l;
int S, arb [5*nmax];
void update (int nod, int x, int y)
{
if (x == y)
{
arb [nod]+=val;
return;
}
int mij=(x+y)>>1;
if (poz <= mij)
update (nod<<1, x, mij);
else
update ((nod<<1)|1, mij+1, y);
arb [nod]=arb [nod<<1]+arb [(nod<<1)|1];
}
void query (int nod, int x, int y)
{
if (x >= f && y <= l)
{
S+=arb [nod];
return;
}
int mij=(x+y)>>1;
if (f <= mij)
query (nod<<1, x, mij);
if (l > mij)
query ((nod<<1)|1, mij+1, y);
}
int main ()
{
freopen ("datorii.in", "r", stdin);
freopen ("datorii.out", "w", stdout);
int tip;
scanf ("%d%d", &n, &m);
for (int i=1; i<=n; ++i)
{
scanf ("%d", &val);
poz=i;
update (1, 1, n);
}
for (int i=1; i<=m; ++i)
{
scanf ("%d", &tip);
if (!tip)
{
scanf ("%d%d", &poz, &val);
val*=-1;
update (1, 1, n);
}
else
{
scanf ("%d%d", &f, &l);
S=0;
query (1, 1, n);
printf ("%lld\n", S);
}
}
return 0;
}