Cod sursa(job #2753236)

Utilizator DianaZaharia132nr2Zaharia Diana Cristiana DianaZaharia132nr2 Data 21 mai 2021 20:14:03
Problema Arbori de intervale Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.31 kb
#include <fstream>
#include<iostream>
using namespace std;

#define dim 100001
ifstream f("arbint.in");
ofstream g("arbint.out");

int N, M;
int Arb[4*dim+66];
int start, finish, a, b, maxim;


void intermaxim(int i, int L, int R, int &maxim)
{
     if ( start <= L && finish >= R )
     {
          if ( maxim < Arb[i] ) maxim = Arb[i];

     }

     int aux = (L+R)/2;
     if ( start <= aux ) intermaxim(2*i,L,aux,maxim);
     if ( aux < finish ) intermaxim(2*i+1,aux+1,R,maxim);

}

 inline int Maxim(int x, int y) {
       if ( x > y ) return x;
       return y;
}

void schimbare(int i, int L, int R)
{
     if ( L == R)
       Arb[i] = b;

     int aux = (L+R)/2;
     if ( a <= aux )
     schimbare(2*i,L,aux);
     else
     schimbare(2*i+1,aux+1,R);

     Arb[i] = Maxim( Arb[2*i], Arb[2*i+1] );
}


int main()
{
    int X, A, B,j;
    f>>N>>M;

  for ( j= 1; j<= N; ++j)
    {  f>>X;
        a = j; b = X;
        schimbare(1,1,N);
    }

    for ( j = 1; j <= M; ++j)
    { f>>X;
        if ( X == 0 )
        { f>>A>>B;
             maxim = -1;
             start = A, finish = B;
             intermaxim(1,1,N,maxim);
               g<<maxim<<endl;

        }
        else
        {
            a = A, b = B;
            schimbare(1,1,N);
        }
    }
}