Pagini recente » Borderou de evaluare (job #982010) | Cod sursa (job #689572) | Cod sursa (job #3217978) | Cod sursa (job #774922) | Cod sursa (job #1419578)
#include <string>
#include <stdio.h>
#include <iostream>
using namespace std;
int main() {
int *AIB, m, n, op, num, cp, search, max = 1, certain, step, j, sumA, sumB, a, b;
freopen("datorii.in", "r", stdin);
freopen("datorii.out", "w", stdout);
scanf("%d%d", &m, &n);
for(cp = m; cp >>= 1; max <<= 1);
max <<= 1;
AIB = new int[max + 1];
for(int iteratii = 0; iteratii < m; ++iteratii) {
scanf("%d", &num);
for (int i = iteratii + 1; i <= max; i += (i & (-i))) {
AIB[i] += num;
}
}
for(int iteratii = 0; iteratii < n; ++iteratii) {
scanf("%d", &op);
switch(op) {
case 0:
scanf("%d%d", &a, &b);
for (int i = a; i <= max; i += (i & (-i))) {
AIB[i] -= b;
}
break;
case 1:
scanf("%d%d", &a, &b);
sumA = 0;
sumB = 0;
for(int i = a - 1; i > 0; i -= (i & (-i)))
sumA += AIB[i];
for(int i = b; i > 0; i -= (i & (-i)))
sumB += AIB[i];
printf("%d\n", sumB - sumA);
break;
}
}
delete[] AIB;
return 0;
}