Cod sursa(job #2638400)

Utilizator kidesoEles Julia kideso Data 28 iulie 2020 09:39:35
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.36 kb
#include <fstream>
#include <vector>

using namespace std;

ifstream cin ("datorii.in");
ofstream cout ("datorii.out");

int N, M, i, a, b, op, sum;
vector <int> x, y;

void betesz (int bal, int jobb, int gyoker, int poz, int k)
{
    if (bal == jobb)
    {
        x[gyoker] = k;
        return;
    }

    int kozep = (bal + jobb) / 2;

    if (poz <= kozep) betesz (bal, kozep, 2 * gyoker, poz, k);
    else betesz (kozep + 1, jobb, 2 * gyoker + 1, poz, k);

    x[gyoker] = x[2 * gyoker] + x[2 * gyoker + 1];
}

void leker (int bal, int jobb, int gyoker, int a, int b)
{
    if (a <= bal && jobb <= b)
    {
        sum += x[gyoker];
        return;
    }

    int kozep = (bal + jobb) / 2;

    if (a <= kozep) leker (bal, kozep, 2 * gyoker, a, b);
    if (b > kozep) leker (kozep + 1, jobb, 2 * gyoker + 1, a, b);
}

int main()
{
    cin >> N >> M;
    x.resize(4 * N + 1);
    y.resize(N + 1);
    for (i = 1; i <= N; ++i)
    {
        cin >> a;
        y[i] = a;
        betesz (1, N, 1, i, a);
    }

    for (i = 1; i <= M; ++i)
    {
        cin >> op >> a >> b;
        if (op == 0)
        {
            y[a] -= b;
            betesz (1, N, 1, a, y[a]);
        }
        else
        {
            sum = 0;
            leker (1, N, 1, a, b);
            cout << sum << "\n";
        }
    }
    return 0;
}