Cod sursa(job #1468903)

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

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

int v[Nmax],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;

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

    if(stop>(st+dr)/2)
    {
        nr2=maxim(nod*2+1,mij+1,stop,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)
        {
            /*if(((x<=(n+1)/2) && (y<=(n+1)/2)) || ((x>(n+1)/2) && (y>(n+1)/2)))
            {*/

            nr1=0;
            nr2=0;

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

            /*else
            {
                stop=n/2;
                a=maxim(1,1,n);
                stop=y;
                start=n/2+1;
                b=maxim(1,1,n);
                fout<<max(a,b);
            }*/
        }

        else
        {
            poz=x;
            val=y;

            update(1,1,n);
        }
    }

    return 0;
}