Pagini recente » Cod sursa (job #387882) | Cod sursa (job #2101337) | Cod sursa (job #2567314) | Cod sursa (job #1536165) | Cod sursa (job #1418437)
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#define zeros(x) ( (x ^ (x - 1)) & x )
using namespace std;
// adauga la valoarea de pe indexul x din a valoarea val
void add(int x, int n, int val, int* aib) {
for (int j = x; j <= n; j += zeros(j)) {
aib[j] += val;
}
}
// calculeaza suma primelor x valori din a
int compute(int x, int* aib) {
int result = 0;
for (int i = x; i > 0; i -= zeros(i)) {
result += aib[i];
}
return result;
}
int main() {
freopen("datorii.in", "r", stdin);
freopen("datorii.out", "w", stdout);
int n, m;
scanf("%i", &n);
scanf("%i", &m);
int* a = (int*)malloc((n + 1) * sizeof(int));
int* aib = (int*)calloc(n + 1, sizeof(int));
a[0] = 0;
aib[0] = 0;
for (int i = 1; i <= n; i++) {
scanf("%i", a + i);
add(i, n, a[i], aib);
}
for (int i = 0; i < m; i++) {
int cod;
scanf("%i", &cod);
if (cod == 0) {
int t, v;
scanf("%i", &t);
scanf("%i", &v);
add(t, n, -v, aib);
}
else {
int p, q;
scanf("%i", &p);
scanf("%i", &q);
int sum1 = compute(q, aib);
int sum2 = compute(p - 1, aib);
printf("%i\n", sum1 - sum2);
}
}
fclose(stdin);
fclose(stdout);
return 0;
}