Cod sursa(job #2686451)

Utilizator alex_braslasuBraslasu Alexandru alex_braslasu Data 19 decembrie 2020 10:46:12
Problema Datorii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.3 kb
#include <fstream>

using namespace std;

ifstream f("datorii.in");
ofstream g("datorii.out");

int n, m, i, val, c, x, y, poz, start, finish, TOTAL, tree[30100];

static inline void Update(int nod, int st, int dr)
{
    if (st == dr)
    {
        tree[nod] -= val;
        return;
    }
    int m = (st + dr) / 2;
    if (poz <= m)
        Update(2 * nod, st, m);
    else
        Update(2 * nod + 1, m + 1, dr);
    tree[nod] = tree[2 * nod] + tree[2 * nod + 1];
}

static inline void Query(int nod, int st, int dr)
{
    if (start <= st && finish >= dr)
    {
        TOTAL += tree[nod];
        return;
    }
    int m = (st + dr) / 2;
    if (start <= m)
        Query(2 * nod, st, m);
    if (m < finish)
        Query(2 * nod + 1, m + 1, dr);
}

int main()
{
    f >> n >> m;
    for (i = 1; i <= n; ++i)
    {
        f >> val;
        poz = i;
        val = -val;
        Update(1, 1, n);
    }
    for (i = 1; i <= m; ++i)
    {
        f >> c >> x >> y;
        if (c == 0)
        {
            poz = x;
            val = y;
            Update(1, 1, n);
        }
        else
        {
            TOTAL = 0;
            start = x;
            finish = y;
            Query(1, 1, n);
            g << TOTAL << '\n';
        }
    }
    return 0;
}