Cod sursa(job #2219066)

Utilizator axelteoTeodor Dutu axelteo Data 7 iulie 2018 01:00:31
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <fstream>

using namespace std;

#define MAX_N 15001

ifstream fIn("datorii.in");
ofstream fOut("datorii.out");

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() {
    char op;
    int x, y;

    fIn >> numDays >> numQueries;

    for (register int i = 1; i <= numDays; ++i) {
        fIn >> x;
        updateBIT(i, x);
    }

    for (register int i = 0; i < numQueries; ++i) {
        fIn >> op;

        switch (op) {
            case '0':
                fIn >> x >> y;

                updateBIT(x, -y);
                break;

            case '1':
                fIn >> x >> y;

                fOut << getSum(x, y) << '\n';
                break;
        }
    }

    return 0;
}