Pagini recente » Cod sursa (job #3137567) | Cod sursa (job #1807307) | Cod sursa (job #1416482) | Cod sursa (job #2563493) | Cod sursa (job #42829)
Cod sursa(job #42829)
//(c) author Mircea Dima
// Arbori Indexati Binar
// datorii.cpp
#include <stdio.h>
#define maxn 50
int s[maxn], m, n;
int bit(int x)
// returneaza 2^k unde k este cel mai nesemnificativ bit al lui x
{
return (x & ( (x-1)^x));
}
void update(int x, int val, int sgn)
// n<<1 = n*2 ; daca sgn e 1 atunci se aduna, daca e -1 se scade
{
for(; x<=n ;x+=bit(x)) s[x]+=sgn*val;
}
int query(int x)
// determina suma de la 1 la x
{
int sum=0;
for(; x>0 ;x-=bit(x))sum+=s[x];
return sum;
}
void citire()
{
int i;
freopen("datorii.in", "r", stdin);
freopen("datorii.out", "w", stdout);
scanf("%d %d\n", &n, &m);
for(i=1;i<=n;i++)
{
int x;
scanf("%d ", &x);
update(i, x, 1);
}
for(i=1;i<=m;i++)
{
int p, q, t;
scanf("%d %d %d\n", &p, &q, &t);
if(p==0) update(q, t, -1);
else printf("%d\n", query(t)-query(q-1));
}
}
int main()
{
citire();
return 0;
}