Pagini recente » Cod sursa (job #1946117) | Cod sursa (job #2770864) | Cod sursa (job #1301153) | Cod sursa (job #296072) | Cod sursa (job #1793652)
#include <stdio.h>
using namespace std;
#define N_MAX 15000
#define M_MAX 100000
FILE *fin = fopen("datorii.in", "r");
FILE *fout = fopen("datorii.out", "w");
int N, M;
int A[M_MAX + 1];
int aib[N_MAX + 1];
int aib_size = N_MAX;
void add(int pos, int val) {
do{
aib[pos] += val;
pos += pos & (-pos);
} while(pos <= aib_size);
}
int sum(int x) {
int S = 0;
while(x != 0){
S += aib[x];
x &= (x - 1);
}
return S;
}
int sum_interval(int st, int dr){
return sum(dr) - sum(st - 1);
}
int main() {
int i, j, val;
int opr, x, y;
fscanf(fin, "%d %d", &N, &M);
for (i = 1; i <= N; i++) {
fscanf(fin, "%d", &val);
add(i, val);
}
for (i = 1; i <= M; i++) {
fscanf(fin, "%d %d %d", &opr, &x, &y);
if (opr == 1) {
fprintf(fout, "%d\n", sum_interval(x, y));
}
else {
add(x, -y);
}
}
fclose(fin);
fclose(fout);
return 0;
}