Pagini recente » Cod sursa (job #2072997) | Cod sursa (job #582666) | Cod sursa (job #1465840) | Cod sursa (job #3149494) | Cod sursa (job #2151738)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("arbint.in") ;
ofstream fout("arbint.out") ;
int arb[200001] ;
int poz , val , n , m , maxrez , start , finall ;
void afis()
{
for (int i = 1 ; i < 2*n ; i++ )
cout << arb[i] << " " ;
cout << endl ;
}
void schimb(int nod , int left , int right )
{
if ( left == right )
{
arb[nod] = val ;
return ;
}
int med = (left+right)/2 ;
if ( poz <= med )
schimb(2*nod,left,med) ;
else
schimb(2*nod+1,med+1,right) ;
arb[nod] = max(arb[2*nod],arb[2*nod+1]) ;
}
void maxim(int nod,int left , int right )
{
if ( start <= left && right <= finall )
{
if ( maxrez < arb[nod] )
maxrez = arb[nod] ;
return ;
}
int med = (left+right)/2 ;
if ( start <= med )
maxim(2*nod,left,med) ;
if ( med < finall )
maxim(2*nod+1,med+1,right) ;
}
int main()
{
int i , test;
fin >> n >> m ;
for ( i = 1 ; i <= n ; i++ )
{
fin >> val ;
poz = i ;
schimb(1,1,n) ;
}
for ( i = 1 ; i <= m ; i++ )
{
fin >> test ;
if ( test == 0 )
{
fin >> start >> finall ;
maxrez = -1 ;
maxim(1,1,n) ;
fout << maxrez << '\n' ;
}
else
{
fin >> poz >> val ;
schimb(1,1,n) ;
}
}
}