Cod sursa(job #2219071)

Utilizator axelteoTeodor Dutu axelteo Data 7 iulie 2018 01:05:10
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 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;
}