Pagini recente » Cod sursa (job #2462222) | Cod sursa (job #1080062) | Cod sursa (job #225576) | Cod sursa (job #2239498) | Cod sursa (job #113678)
Cod sursa(job #113678)
#include <stdio.h>
#define Nmax 15001
int n, i, j, ii;
long m, c[Nmax], k, val, a, p, q;
long suma(long p, long q);
int main()
{
freopen("datorii.in", "r", stdin);
freopen("datorii.out", "w", stdout);
scanf("%d %ld\n", &n, &m);
for (i=1; i<=n; i++)
{
scanf("%ld ", &val);
if (val){
c[i]+=val;
for ( j=i; j<=n; )
{
for (k=1; !(j&k); k<<=1);
j+=k;
if (j<=n) c[j]+=val;
}}
}
for (; m; m--)
{
scanf("%ld %ld %ld\n", &a, &p, &q);
if (a==1) printf( "%ld\n", suma(p,q) );
else
{
c[p]-=q;
for (; p<=n; )
{
for (k=1; !(k&p); k<<=1); p+=k;
if (p<=n) c[p]-=q;
}
}
}
return 0;
}
long suma(long p, long q)
{
long st=c[--p],dr=c[q];
for (;q;)
{
for (k=1; !(k&q); k<<=1); q-=k;
if (q) dr+=c[q];
}
for (;p;)
{
for (k=1; !(k&p); k<<=1); p-=k;
if (p) st+=c[p];
}
return dr-st;
}