Cod sursa(job #2433636)

Utilizator claudiu.gatinaFMI Claudiu Gatina claudiu.gatina Data 28 iunie 2019 13:58:51
Problema Datorii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <iostream>
#include <cstdio>

using namespace std;

int n, m, l;
int arb[30010];

void read()
{
    cin >> n >> m;

    l = 1;
    while(l < n)
        l <<= 1;

    for(int i = 0; i < n; ++i)
    {
        cin >> arb[l + i];
    }
}

void initArb()
{
    for(int i = l - 1; i; --i)
        arb[i] = arb[i << 1] + arb[(i << 1) + 1];
}

void printSum(int x, int y)
{
    int sum = 0;

    while(x != y)
    {
        if(x & 1)
            sum -= arb[x - 1];
        if(!(y & 1))
            sum -= arb[y + 1];

        x >>= 1;
        y >>= 1;
    }

    sum += arb[x];

    cout << sum << '\n';
}

void solve()
{
    --l;
    for(int i = 0; i < m; ++i)
    {
        int op, x, y;
        cin >> op >> x >> y;
        if(op == 0)
        {
            for(int r = l + x; r; r >>= 1)
                arb[r] -= y;
        }
        else
        {
            printSum(l + x, l + y);
        }
    }
}

int main()
{
    freopen("datorii.in", "r", stdin);
    freopen("datorii.out", "w", stdout);

    read();
    initArb();
    solve();

    return 0;
}