Cod sursa(job #2625081)

Utilizator vladdudauDudau Vlad vladdudau Data 5 iunie 2020 18:32:12
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.44 kb
#include <bits/stdc++.h>
#define N 100001
using namespace std;

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

int n, m;
int MaxArb[4*N+66];
int start, stop, valoare, pozitie, maxim;

void Update(int nod, int stanga, int dreapta)
{
     if ( stanga == dreapta )
     {
          MaxArb[nod] = valoare;
          return;
     }

     int mijloc = (stanga+dreapta)/2;
     if ( pozitie <= mijloc )
        Update(2*nod,stanga,mijloc);
     else
        Update(2*nod+1,mijloc+1,dreapta);

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

void Query(int nod, int stanga, int dreapta)
{
     if ( start <= stanga && dreapta <= stop )
     {
          if ( maxim < MaxArb[nod] )
            maxim = MaxArb[nod];
          return;
     }

     int mijloc = (stanga+dreapta)/2;
     if ( start <= mijloc ) Query(2*nod,stanga,mijloc);
     if ( mijloc < stop ) Query(2*nod+1,mijloc+1,dreapta);
}
int X, A, B;

int main()
{

    fin>>n>>m;
    for ( int i = 1; i <= n; i++ )
    {
        fin>>X;
        pozitie = i, valoare = X;
        Update(1,1,n);
    }

    for ( int i = 1; i <= m; i++ )
    {
        fin>>X>>A>>B;
        if ( X == 0 )
        {
             maxim = -1;
             start = A, stop = B;
             Query(1,1,n);

             fout<<maxim<<"\n";
        }
        else
        {
            pozitie = A  , valoare = B;
            Update(1,1,n);
        }
    }
}