Cod sursa(job #1044821)

Utilizator CostinVFMI CostinVictorGabriel CostinV Data 30 noiembrie 2013 14:56:43
Problema Arbori de intervale Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include<fstream>
#define MAX 200001

using namespace std;

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

int macs(int a, int b)
{
    if(a>b) return a;
    return b;
}

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] = macs (arb[p*2], arb[(p*2)+1]);
}

void query(int p, int a, int b)
{
    if (low<=a && b<=high)
    {
        if(mcs<arb[p]) mcs = 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("arbint.in");
    ofstream g("arbint.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)
        {
            mcs=-1;
            f>>low>>high;
            query(1, 1, n);
            g<<mcs<<"\n";
        }
        else
        {
            f>>poz>>x;
            update(1, 1, n);
        }
    }

    return 0;
}