Cod sursa(job #2337619)

Utilizator isav_costinVlad Costin Andrei isav_costin Data 6 februarie 2019 16:17:58
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.2 kb
#include <fstream>
 
#define MAXN 100000
 
using namespace std;
 
ifstream fin( "arbint.in" );  
ofstream fout( "arbint.out" );
 
int aint[4*MAXN+5];
 
inline int maxim( int x, int y )
{
  if( x>y )
    return x;
  else
    return y;
}
 
void update( int p, int val, int poz, int st, int dr )
{
  if( st==dr )
    aint[poz]=val;
  else
  {
    int mid=(st+dr)/2;
    
    if( p<=mid )
      update(p,val,2*poz,st,mid);
    else
      update(p,val,2*poz+1,mid+1,dr);
 
    aint[poz]=maxim(aint[2*poz],aint[2*poz+1]);
  }
}
 
int query( int a, int b, int poz, int st, int dr )
{
  if( a<=st && dr<=b )
    return aint[poz];
  else
  {
    int mid=(st+dr)/2, ans=0;
    
    if( a<=mid )
      ans=maxim(ans,query(a,b,2*poz,st,mid));
 
    if( mid+1<=b )
      ans=maxim(ans,query(a,b,2*poz+1,mid+1,dr));
    
    return ans;
  }
}
 
 
int main()
{
  int n, m;
 
  fin>>n>>m;
 
  for( int i=1;i<=n;i++ )
  {
    int k;
    
    fin>>k;
 
    update(i,k,1,1,n);
  }
 
 
  for( int i=1;i<=m;i++ )
  {
    int op, a, b;
    
    fin>>op>>a>>b;
    
    if( op )
      update(a,b,1,1,n);
    else
      fout<<query(a,b,1,1,n)<<'\n';
  }
 
  return 0;
}