Cod sursa(job #2752497)

Utilizator PaduraruCristianPaduraru Cristian Daniel PaduraruCristian Data 18 mai 2021 09:20:45
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int aint[60004];
int n,m;

int tst, tdr;

void update(int index, int st, int dr, int target, int val)
{
    aint[index]+=val;
    if(st<dr)
    {
        int mid = (st+dr)/2;
        if(target<=mid)
            update(index<<1, st, mid, target, val);
        else
            update((index<<1)+1, mid+1, dr, target, val);
    }

}

int query(int index, int st, int dr)
{

    if(tst<=st && dr<=tdr)
        return aint[index];

    int mid = (st+dr)/2;

    if(tst<=mid && tdr>mid)
        return query(index<<1, st, mid) + query((index<<1)+1, mid+1, dr);

    if(tdr<=mid && tdr>=st)
        return query(index<<1, st, mid);
    if(tst>mid && tst<=dr)
        return query((index<<1)+1, mid+1, dr);

    return 0;
}



int main()
{
    int i, op;
    f>>n>>m;

    for(i=1;i<=n;++i)
    {
        f>>tst;
        update(1, 1, n, i, tst);
    }

    for(i=1;i<=m;++i)
    {
        f>>op>>tst>>tdr;
        if(op==0)
            update(1,1,n, tst, -tdr);
        else
            g<<query(1, 1,n)<<'\n';
    }

    return 0;
}