Cod sursa(job #2395805)

Utilizator radumihaisirbuSirbu Radu-Mihai radumihaisirbu Data 2 aprilie 2019 21:29:01
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.34 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin ("datorii.in");
ofstream fout ("datorii.out");

const int nmax = 1e5 + 5;

int n, q, a[5 * nmax], op, x, y, val, poz, start, finish, SUM, v[nmax];

void update (int nod, int st, int dr)
{
    int mij;

    if (st == dr)
    {
        a[nod] = val;
        return;
    }

    mij = (st + dr) / 2;
    if (poz <= mij) update(2 * nod, st, mij);
    else update(2 * nod + 1, mij+1, dr);

    a[nod] = a[2*nod] + a[2*nod+1];
}

int query (int nod, int st, int dr)
{
    int mij, SUMA = 0, SUMB = 0;

    if (start <= st && dr <= finish)
    {
        return a[nod];
    }

    mij = (st + dr) / 2;
    if (start <= mij) SUMA = query(2*nod, st, mij);
    if (mij < finish) SUMB = query(2*nod+1, mij+1, dr);
    return SUMA + SUMB;
}

int main()
{
    fin >> n >> q;
    for (int i=1; i<=n; i++)
    {
        fin >> val;
        v[i] = val;
        poz = i;
        update(1, 1, n);
    }
    while (q--)
    {
        fin >> op >> x >> y;
        if (op == 0)
        {
            poz = x;
            v[x] -= y;
            val = v[x];
            update(1, 1, n);
        }
        else
        {
            start = x;
            finish = y;
            SUM = query(1, 1, n);
            fout << SUM << '\n';
        }
    }
    return 0;
}