Pagini recente » Cod sursa (job #2399307) | Cod sursa (job #229221) | Cod sursa (job #2580086) | Cod sursa (job #1931060) | Cod sursa (job #1220593)
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define NX 15010
int N, M, A[NX], VAL, K;
void create(int poz)
{
if (K == 1) {
A[poz] += VAL;
} else {
A[poz] -= VAL;
}
int C = 0;
while (poz < N)
{
while (!(poz & (1 << C))) C++;
poz += 1 << C;
if (K == 1) {
A[poz] += VAL;
} else {
A[poz] -= VAL;
}
C += 1;
}
}
int query(int right)
{
int sum = 0, C = 0;
while (right > 0)
{
sum += A[right];
while (!(right & (1 << C))) C++;
right -= 1 << C;
}
return sum;
}
int main()
{
freopen("datorii.in", "r", stdin);
freopen("datorii.out", "w", stdout);
scanf("%d %d", &N, &M);
K = 1;
int elem = 0;
for (int i = 1; i <= N; i++)
{
scanf("%d", &elem);
VAL = elem;
create(i);
}
K = 0;
int cod = 0, a = 0, b = 0;
for (int i = 1; i <= M; i++)
{
scanf("%d %d %d", &cod, &a, &b);
switch (cod)
{
case 0:
VAL = b;
create(a);
break;
case 1:
printf("%d\n", query(b) - query(a - 1));
break;
}
}
}