Pagini recente » Cod sursa (job #911809) | Cod sursa (job #778225) | Cod sursa (job #2080187) | Cod sursa (job #703960) | Cod sursa (job #41250)
Cod sursa(job #41250)
// Problema datorii
#include <stdio.h>
#define MAX 15001
int A[MAX];
long b[MAX];
int n;
int query(int x)
{
int r = 0;
for (; x; x -= (x ^ (x-1)) & x)
r += b[x];
return r;
}
void update(int x, int v)
{
for (; x <= n; x += (x^(x-1)) & x)
b[x] -= v;
}
int main()
{
freopen( "datorii.in", "rt", stdin );
long m;
scanf( "%d %ld", &n, &m );
int i, j, k;
b[0] = 0;
for( i=1; i<=n; i++ )
scanf( "%d", &A[i] );
b[1] = A[1];
for( i=2; i<=n; i++ )
{
j = i;
k = 0;
while( j%2 == 0 ) { k++; j = j>>1; }
j = 1;
while( k ) { j = j<<1; k--; }
for( k=i-j+1; k<=i; k++ )
b[i] += A[k];
}
freopen( "datorii.out" , "wt", stdout );
int c, p, q;
while( m > 0 )
{
m--;
scanf( "%d %d %d", &c, &p, &q );
if( c == 0 ) update( p, q );
else
printf( "%d\n", query(q)-query(p-1) );
}
fclose( stdin );
fclose( stdout );
return 0;
}