Cod sursa(job #1044852)

Utilizator CostinVFMI CostinVictorGabriel CostinV Data 30 noiembrie 2013 15:40:18
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.34 kb
#include<fstream>
#define MAX 100001

using namespace std;

int low, high, arb[MAX], x, poz, s;

void update (int p, int a, int b)
{
    if (a==b)
    {
        arb[p] = x;
        return;
    }

    int mij = (a+b)/2;

    if(poz<=mij) update (p*2, a, mij);
    else update ((p*2)+1, mij+1, b);

    arb[p] = arb[p*2] + arb[(p*2)+1];
}

void sc (int p, int a, int b)
{
    if (a==b)
    {
        arb[p] -= x;
        return;
    }

    int mij = (a+b)/2;

    if(poz<=mij) sc (p*2, a, mij);
    else sc ((p*2)+1, mij+1, b);

    arb[p] = arb[p*2] + arb[(p*2)+1];
}

void query(int p, int a, int b)
{
    if (low<=a && b<=high)
    {
        s = s + arb[p];
        return;
    }

    int mij = (a+b)/2;

    if(low<=mij)
        query (p*2, a, mij);
    if(mij<high)
        query(p*2+1, mij+1, b);
}

int main()
{
    int n, m, i, y;
    ifstream f("datorii.in");
    ofstream g("datorii.out");
    f>>n>>m;

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

    for(i=1; i<=m; i++)
    {
        f>>y;

        if(y==0)
        {
            f>>poz>>x;
            sc(1, 1, n);
        }
        else
        {
            s=0;
            f>>low>>high;
            query(1, 1, n);
            g<<s<<"\n";
        }
    }

    return 0;
}