Pagini recente » Profil DursinaAlexandru | Cod sursa (job #1582685) | Cod sursa (job #1775386) | Cod sursa (job #1350529) | Cod sursa (job #760972)
Cod sursa(job #760972)
#include <cstdio>
#define ARB 32768
#define N 15001
int arb[ARB],frunza[N];
int x,y;
void construire(int a, int b, int poz)
{
if (a == b)
{
frunza [a] = poz;
return;
}
int mij = (a+b)/2;
construire(a,mij,2*poz);
construire(mij+1,b,2*poz+1);
}
void adaugare(int poz, int val)
{
int k = frunza[poz];
arb [k] -= val;
for (k/=2;k>=1;k/=2)
arb[k] = arb [2*k] + arb [2*k+1];
}
int interogare(int a, int b, int poz)
{
if ((x <= a)&&(b <= y))
return arb[poz];
if ((b < x)||(y < a))
return 0;
int mij = (a+b)/2;
return interogare(a,mij,2*poz)+interogare(mij+1,b,2*poz+1);
}
int main()
{
int n,m,nr,tip;
freopen ("datorii.in","r",stdin);
freopen ("datorii.out","w",stdout);
scanf ("%d%d",&n,&m);
construire(1,n,1);
for (int i = 1; i <= n; ++i)
{
scanf ("%d",&nr);
adaugare(i,-nr);
}
for (int i = 1; i <= m; ++i)
{
scanf ("%d%d%d",&tip,&x,&y);
if (tip == 0)
adaugare(x,y);
else
printf ("%d\n",interogare(1,n,1));
}
return 0;
}