Cod sursa(job #2755342)

Utilizator HatersMcCristian Ioan HatersMc Data 26 mai 2021 23:53:39
Problema Datorii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <vector>
#include <fstream>
#define fn "datorii."
using namespace std;
ifstream f(fn"in");
ofstream g(fn"out");
int maxim=15010;
int n, m, v[60050], op, a, b;


int query(int nod, int st, int dr, int l, int r)
{
    if(st >= l and dr <= r)
        return v[nod];
    int mij = (st + dr) / 2;
    int sta,dra;
    if(l <= mij)
        sta = query(2 * nod, st, mij, l, r);
    if(r > mij)
        dra = query(2 * nod + 1, mij + 1, dr, l, r);
    return sta + dra;
}

void update(int nod, int st, int dr, int index, int val)
{
    if (st == dr)
    {
        v[nod] += val;
    }
    else {
        int mij = (st + dr) / 2;
        if (index <= mij)
            update(2 * nod, st, mij, index, val);
        else
            update(2 * nod + 1, mij + 1, dr, index, val);
        v[nod] = v[2 * nod] + v[2 * nod + 1];
    }
}
int main()
{
    f>>n>>m;
    for (int i = 1 ; i <= n ; ++i)
    {
        f>>a;
        update(1, 1, n, i, a);
    }
    for (int i = 0 ; i < m ; ++i)
    {
        f>>op>>a>>b;
        if(op == 1)
            g << query(1, 1, n, a, b) << '\n';
        else
            update(1, 1, n, a, -b);
    }

    return 0;
}