Pagini recente » Cod sursa (job #1217160) | Cod sursa (job #2301257) | Cod sursa (job #1013243) | Cod sursa (job #2910281) | Cod sursa (job #219041)
Cod sursa(job #219041)
#include <stdio.h>
#define dim 15000
int n, a[dim+1], x[dim+1];
long m;
long suma1(int p)
{
long s=0;
int t;
while (p)
{
s+=x[p];
p-=((p^(p-1))&p);
}
return s;
}
long suma(int st, int dr)
{
return suma1(dr)-suma1(st-1);
}
void actualizeaza(int p, int val)
{
int t;
while (p<=n)
{
x[p]-=val;
p+=((p^(p-1))&p);
}
}
int main()
{
int i, op, p1, p2, k, s;
long j;
freopen("datorii.in", "r", stdin);
freopen("datorii.out", "w", stdout);
scanf("%d %ld\n", &n, &m);
for (i=1; i<=n; i++)
scanf("%d ", &a[i]);
for (i=1; i<=n; i++)
{
k=i-((i^(i-1))&i)+1;
s=0;
for (j=k; j<=i; j++) s+=a[j];
x[i]=s;
}
for (j=0; j<m; j++)
{
scanf("%d %d %d\n", &op, &p1, &p2);
if (op) printf("%ld\n", suma(p1, p2));
else actualizeaza(p1, p2);
}
return 0;
}