Cod sursa(job #1468907)

Utilizator Chirita_MateiChirita Matei Chirita_Matei Data 7 august 2015 11:48:28
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.33 kb
#include <fstream>
#define Nmax 100005

using namespace std;
ofstream fout("arbint.out");
ifstream fin("arbint.in");

int v[300000],val,poz,n,m,nr1,nr2;

void update(int nod, int st, int dr)
{
    int mij=0;

    if(st==dr)
    {
        v[nod]=val;
        return;
    }

    mij=(st+dr)/2;

    if(poz<=mij)
    {
        update(nod*2,st,mij);
    }

    else
    {
        update(nod*2+1,mij+1,dr);
    }

    v[nod]=max(v[nod*2],v[nod*2+1]);
}

int maxim(int nod, int st, int dr, int start, int stop)
{
    if(st==start && dr==stop)
    {
        return v[nod];
    }

    int mij=(st+dr)/2,nr1=0,nr2=0;

    if(start<=mij)
    {
        nr1=maxim(nod*2,st,mij,start,min(stop,mij));
    }

    if(stop>mij)
    {
        nr2=maxim(nod*2+1,mij+1,dr,max(mij+1,start),stop);
    }

    return max(nr1,nr2);
}

int main()
{
    int x,a,b,i,o,y;

    fin>>n>>m;

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

    for(i=1; i<=m; i++)
    {
        fin>>o>>x>>y;


        if(o==0)
        {
            nr1=0;
            nr2=0;

            fout<<maxim(1,1,n,x,y)<<'\n';
        }

        else
        {
            poz=x;
            val=y;

            update(1,1,n);
        }
    }

    return 0;
}