Pagini recente » Cod sursa (job #2074561) | Cod sursa (job #2799425) | Cod sursa (job #1632054) | Cod sursa (job #847833) | Cod sursa (job #2833146)
#include <stdio.h>
#include <math.h>
int v[15001];
int n;
/// (MAX_n + SQ_N - 1)/SQ_N
int batog[124];
int query(int left, int right) {
int firstInterval, lastInterval, result, sq;
sq = sqrt(n);
firstInterval = (left+sq-1)/sq*sq;
lastInterval = right/sq*sq;
result = 0;
while (left<=right && left<firstInterval) {
result += v[left];
left++;
}
while (right>=left && right>=lastInterval) {
result += v[right];
right--;
}
firstInterval /= sq;
lastInterval /= sq;
while (firstInterval < lastInterval) {
result += batog[firstInterval];
firstInterval++;
}
return result;
}
int main() {
FILE *fin, *fout;
fin = fopen("datorii.in", "r");
fout = fopen("datorii.out", "w");
int i, q, op, a, b, sq, pos, value;
fscanf(fin, "%d%d", &n, &q);
for (i=0; i<n; i++) {
fscanf(fin, "%d", &v[i]);
}
sq = sqrt(n);
for (i=0; i<n; i++) {
batog[i/sq] += v[i];
}
while (q>0) {
fscanf(fin, "%d%d%d", &op, &a, &b);
a--;
b--;
if (op == 0) {
b++;
pos = a;
value = b;
batog[pos/sq] -= value;
v[pos] -= value;
} else if (op == 1) {
fprintf(fout, "%d\n", query(a, b));
}
q--;
}
fclose(fin);
fclose(fout);
return 0;
}