Pagini recente » Cod sursa (job #1361778) | Cod sursa (job #1975353) | Cod sursa (job #3134377) | Cod sursa (job #2591136) | Cod sursa (job #2301357)
#include <stdio.h>
using namespace std;
void actualizeaza(int start, int b, int n, int *AIB) {
for (int i = start; i <= n; i += i & (-i))
AIB[i] -= b;
}
int interogheaza(int start, int *AIB) {
int suma = 0;
while (start > 0) {
suma += AIB[start];
start -= start & (-start);
}
return suma;
}
void construieste_AIB(int start, int stop, int *AIB, int *A) {
for (int i = start; i <= stop; i++)
AIB[i] = A[i];
int j;
for (int i = start; i <= stop; i++) {
j = i + (i & (-i));
if (j <= stop)
AIB[j] += AIB[i];
}
}
int main() {
freopen("datorii.in", "r", stdin);
freopen("datorii.out", "w", stdout);
int n, m, cod, a, b;
scanf("%d %d", &n, &m);
int A[n + 1], AIB[n + 1] = {0};
for (int i = 1; i <= n; i++)
scanf("%d", &A[i]);
construieste_AIB(1, n, AIB, A);
for (int i = 0; i < m; i++) {
scanf("%d %d %d", &cod, &a, &b);
if (cod == 0)
actualizeaza(a, b, n, AIB);
else
printf("%d\n", interogheaza(b, AIB) - interogheaza(a - 1, AIB));
}
return 0;
}