Pagini recente » Cod sursa (job #2578200) | Cod sursa (job #894465) | Cod sursa (job #1108868) | Cod sursa (job #1050018) | Cod sursa (job #2172496)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("arbint.in") ;
ofstream fout("arbint.out") ;
int n , m ,arb[400001] ;
int val , poz , start , finish ,sol;
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 <= finish )
{
if ( arb[nod] > sol )
sol = arb[nod] ;
return ;
}
int med = (left+right)/2 ;
if ( start <= med )
maxim(2*nod,left,med) ;
if ( med < finish )
maxim(2*nod+1,med+1,right) ;
}
int main()
{
int i , t ;
fin >> n >> m ;
for ( i = 1 ; i <= n ; i++ )
{
fin >> val ;
poz = i ;
schimb(1,1,n) ;
}
for ( i = 1 ; i <= m ; i++ )
{
fin >> t ;
if ( t == 1 )
{
fin >> poz >> val ;
schimb(1,1,n) ;
}
else
{
fin >> start >> finish ;
sol = 0 ;
maxim(1,1,n) ;
fout << sol << '\n' ;
}
}
}