Cod sursa(job #1512773)

Utilizator BaweeLazar Vlad Bawee Data 28 octombrie 2015 16:55:11
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.25 kb
#include <fstream>

using namespace std;

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

int val,poz,finish,start,sum;
int arb[15000 * 4 + 1];

void update(int nod, int s, int d)
{
    if(s == d)
    {
        arb[nod] -= val;
        return;
    }
    int mij = (s + d) / 2;
    if(poz <= mij)
        update(nod * 2, s, mij);
    else
        update(nod * 2 + 1, mij + 1, d);

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

void query(int nod,int s,int d)
{
    if(start <= s and finish >= d)
    {
        sum += arb[nod];
        return;
    }
    int mij = (s + d) / 2;
    if(start <= mij) query(2 * nod, s, mij);
    if(finish > mij) query(2 * nod + 1, mij + 1, d);
}

int main()
{
    int n,m,x,a,b;

    f >> n >> m;

    for(int i = 1; i <= n; i++)
    {
        f >> x;
        poz = i;
        val = -x;
        update(1,1,n);
    }

    for(int i = 1; i <= m; i++)
    {
        f >> x >> a >> b;
        if(!x)
        {
            poz = a;
            val = b;
            update(1,1,n);
        }
        else
        {
            start = a;
            finish = b;
            sum = 0;
            query(1,1,n);
            g << sum << "\n";
        }
    }
    return 0;
}