Cod sursa(job #2265579)

Utilizator isav_costinVlad Costin Andrei isav_costin Data 21 octombrie 2018 14:21:31
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb
#include <cstdio>

#define MAXN 100000

using namespace std;

int aint[4*MAXN+5];
int k, a, b, ans;

inline int maxim( int x, int y )
{
  if( x<y )
    x=y;

  return x;
}

void update( int p, int st, int dr )
{
  int mid=(st+dr)/2;

  if( st==dr )
    aint[p]=b;
  else
  {
    if( a<=mid )
      update(2*p,st,mid);
    else
      update(2*p+1,mid+1,dr);

    aint[p]=maxim(aint[2*p],aint[2*p+1]);
  }
}

void query( int p, int st, int dr )
{
  int mid=(st+dr)/2;

  if( a<=st && dr<=b )
    ans=maxim(ans,aint[p]);
  else
  {
    if( a<=mid )
      query(2*p,st,mid);

    if( mid<b )
      query(2*p+1,mid+1,dr);
  }
}


int main()
{
  freopen( "arbint.in", "r", stdin );
  freopen( "arbint.out", "w", stdout );

  int n, m;

  scanf( "%d%d", &n, &m );

  for( int i=1;i<=n;i++ )
  {
    scanf( "%d", &k );

    b=k;
    a=i;

    update(1,1,n);
  }


  for( int i=1;i<=m;i++ )
  {
    scanf( "%d%d%d", &k, &a, &b );

    if( k )
      update(1,1,n);
    else
    {
      ans=0;
      query(1,1,n);

      printf( "%d\n", ans );
    }
  }

  return 0;
}