Cod sursa(job #2907692)

Utilizator MortemPlaiasu Iulia-Silvia Mortem Data 31 mai 2022 10:59:32
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <iostream>


FILE *fin = fopen("datorii.in", "r");
FILE *fout = fopen("datorii.out", "w");

int fenwick[15005];
int n, m;
int biggestPow2;

void addVal(int pos, int val)
{
    while (pos <= n)
    {
        fenwick[pos] += val;
        pos += pos & (-pos);
    }
}

int getUntilPos(int pos)
{
    int pow2 = biggestPow2;
    int currentPos = 0;
    int result = 0;
    while (pow2 != 0)
    {
        if (currentPos + pow2 <= pos)
        {
            currentPos += pow2;
            result += fenwick[currentPos];
        }
        pow2 = pow2 / 2;
    }
    return result;
}

int main()
{
    fscanf(fin, "%d %d", &n, &m);
    for (int i = 0; i < n; i++)
    {
        int b;
        fscanf(fin, "%d" , &b);
        addVal(i + 1, b);
    }
    biggestPow2 = 1;
    while (biggestPow2 <= n)
        biggestPow2 = biggestPow2 * 2;
    biggestPow2 = biggestPow2 / 2;
    for (int i = 0; i < m; i++)
    {
        int type, a, b;
        fscanf(fin, "%d %d %d", &type, &a, &b);
        if (type == 0)
            addVal(a, -b);
        else
            fprintf(fout, "%d\n", getUntilPos(b) - getUntilPos(a - 1));
    }
}