Cod sursa(job #2243163)

Utilizator axelteoTeodor Dutu axelteo Data 20 septembrie 2018 00:31:16
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <cstdio>
 
using namespace std;
 
#define MAX_N 15001
 
FILE *pFileIn = fopen("datorii.in", "rt");
FILE *pFileOut = fopen("datorii.out", "wt");
 
int numDays, numQueries, bit[MAX_N];
 
void updateBIT(int pos, int val) {
    for (; pos <= numDays; pos += (pos & (~pos + 1))) {
        bit[pos] += val;
    }
}
 
int getSum(int posX, int posY) {
    int sum = 0;
 
    for (; posY; posY -= (posY & (~posY + 1))) {
        sum += bit[posY];
    }
 
    for (--posX; posX; posX -= (posX & (~posX + 1))) {
        sum -= bit[posX];
    }
 
    return sum;
}
 
int main() {
    int op, x, y;
 
    fscanf(pFileIn, "%d %d", &numDays, &numQueries);
 
    for (register int i = 1; i <= numDays; ++i) {
        fscanf(pFileIn, "%d", &x);
        updateBIT(i, x);
    }
 
    for (register int i = 0; i < numQueries; ++i) {
        fscanf(pFileIn, "%d ", &op);
 
        switch (op) {
            case 0:
                fscanf(pFileIn, "%d %d", &x, &y);
 
                updateBIT(x, -y);
                break;
 
            case 1:
                fscanf(pFileIn, "%d %d", &x, &y);
 
                fprintf(pFileOut, "%d\n", getSum(x, y));
                break;
        }
    }
 
    return 0;
}