Pagini recente » Cod sursa (job #477304) | Cod sursa (job #48105) | Cod sursa (job #3128622) | Cod sursa (job #861169) | Cod sursa (job #69373)
Cod sursa(job #69373)
/* Ivan Nicolae - Bucuresti */
/* Datorii - Arbori Indexati Binar */
#include <stdio.h>
#define NMAX 15001
#define _fin "datorii.in"
#define _fout "datorii.out"
int i,n,C[NMAX],m;
void Aduna(int i, int x)
{
int poz=i;
while (poz <= n)
{
C[poz]+=x;
poz += poz ^ (poz-1) & poz;
}
}
void Scade(int i, int x)
{
int poz=i;
while (poz <= n)
{
C[poz]-=x;
poz += poz ^ (poz-1) & poz;
}
}
int Query(int i, int j)
{
int R1=0,R2=0,poz=i-1;
while (poz > 0)
{
R1+=C[poz];
poz -= poz ^ (poz-1) & poz;
}
poz=j;
while (poz > 0)
{
R2+=C[poz];
poz -= poz ^ (poz-1) & poz;
}
return (R2-R1);
}
int main(void)
{
freopen(_fin,"r",stdin);
freopen(_fout,"w",stdout);
scanf("%d%d",&n,&m);
for (i=1;i<=n;i++)
{
int x;
scanf("%d",&x);
Aduna(i,x);
}
for (i=1;i<=m;i++)
{
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
if (!x) Scade(y,z);
else printf("%d\n",Query(y,z));
}
fclose(stdin);
fclose(stdout);
return 0;
}