Cod sursa(job #1345871)

Utilizator BologaDragosBologa Dragos BologaDragos Data 17 februarie 2015 21:55:24
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.56 kb
#include <fstream>

using namespace std;

#define NMAX 100001

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

int m,n ;

int ArbMax[4*NMAX + 69] ;

int pos,val ,x,cod,a,b;

int start,finish,maxim ;

void Update(int,int,int) ;
void Querry(int,int,int ) ;


inline int Maxim (int z,int w)
{
    if(z>w)
        return z ;
    return w ;
}


void Update (int nod,int left,int right)
{
    int mij ;
    if(left==right)
    {

        ArbMax[nod]=val ;
        return ;

    }

    mij=(left+right)/2 ;
    if(pos<=mij)
        Update(2*nod,left,mij) ;
    else
        Update(2*nod+1,mij+1,right) ;

    ArbMax[nod] = Maxim(ArbMax[nod*2],ArbMax[2*nod+1]) ;


}

void Querry (int nod,int left,int right)
{
    int mij ;
    if(start<=left&&right<=finish)
    {
        if(ArbMax[nod]>maxim)
            maxim = ArbMax[nod] ;
        return ;
    }
    mij=(left+right)/2 ;

    if(start<=mij)
        Querry(2*nod,left,mij) ;

    if(finish>mij)
        Querry(nod*2+1,mij+1,right) ;


}



int main()
{
    int i ;

    f>>n>>m ;

    for(i=1;i<=n;i++)
    {

        f>>x ;
        pos=i ;
        val=x ;
        Update(1,1,n) ;
    }

    for(i=1;i<=m;i++)
    {
        f>>cod>>a>>b ;
        if(cod==1)
        {
            val=b ;
            pos=a ;
            Update(1,1,n) ;
        }
        else
        {
            maxim=-1 ;
            start=a ;
            finish=b ;
            Querry(1,1,n) ;
            g<<maxim<<'\n' ;
        }
    }





    return 0;
}