Cod sursa(job #2395737)

Utilizator AlexNeaguAlexandru AlexNeagu Data 2 aprilie 2019 20:25:31
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.27 kb
#include <fstream>

using namespace std;
const int NMAX=500005;

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

int Arb[NMAX];
int X,A,B,Nod,N,M,Pos,Val,MAX,start,finish;

void Actualizare(int Nod, int st, int dr)
{
    if (st==dr)
    {
        Arb[Nod]=Val;
        return;
    }
   int mij=(st+dr)/2;
   if (Pos<=mij)
        Actualizare(2*Nod,st,mij);
   else Actualizare(2*Nod+1,mij+1,dr);
   Arb[Nod]=max(Arb[2*Nod],Arb[2*Nod+1]);
}

void Interogare(int Nod, int st, int dr)
{
    if (start<=st&&dr<=finish)
    {
        if (Arb[Nod]>MAX)
            MAX=Arb[Nod];
        return;
    }
    int mij= (st+dr)/2;
    if (start<=mij)
        Interogare(2*Nod,st,mij);
    if (mij<finish)
        Interogare(2*Nod+1,mij+1,dr);
}

int main()
{
    fin>>N>>M;;
    for (int i=1; i<=N; i++)
    {
    fin>>X;
    Pos=i;
    Val=X;
    Actualizare(1,1,N);
    }
    for (int i=1; i<=M; i++)
    {
        fin>>X>>A>>B;
        if (X==0)
        {
            MAX=-1;
            start=A;
            finish=B;
            Interogare(1,1,N);
            fout<<MAX<<"\n";
            }
            else
            {
                Pos=A;
                Val=B;
                Actualizare(1,1,N);
            }
    }
}