Cod sursa(job #2966749)

Utilizator Vincent47David Malutan Vincent47 Data 18 ianuarie 2023 12:35:16
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.58 kb
#include <fstream>

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

    const int dim = 100001;
    int arb[4 * dim];

    void update(int nod, int l, int r, int poz, int val)
    {
        if (l == r)
            arb[nod] += val;
        else
        {
            int mid = (l + r) >> 1;
            if (poz <= mid)
                update(2 * nod, l, mid, poz, val);
            else
                update(2 * nod + 1, mid + 1, r, poz, val);
            arb[nod] = arb[nod * 2] + arb[nod * 2 + 1];
        }
    }

    int query(int nod, int l, int r, int a, int b)
    {
        if (l >= a && r <= b)
            return arb[nod];
        else
        {
            int mid = (l + r) >> 1;
            int sum = 0;
            if (a <= mid)
               sum = query(2 * nod, l, mid, a, b);
            if (b > mid)
                sum += query(2 * nod + 1, mid + 1, r, a, b);
            return sum;
        }
    }

    void build(int nod, int l, int r)
    {
        if (l == r)
            cin >> arb[nod];
        else
        {
            int mid = (l + r) >> 1;
            build(nod * 2, l, mid);
            build(nod * 2 + 1, mid + 1, r);
            arb[nod] = arb[nod * 2] + arb[nod * 2 + 1];
        }
    }



int main()
{
    int n, m, i, op, a, b;
    cin >> n >> m;

    build(1, 1, n);

    for (i = 1; i <= m; ++i)
    {
        cin >> op >> a >> b;
        if (op == 0)
            update(1, 1, n, a, -b);
        else cout << query(1, 1, n, a, b) << '\n';
    }

    return 0;
}