Pagini recente » Cod sursa (job #2577175) | Cod sursa (job #1627954) | Cod sursa (job #2432332) | Cod sursa (job #950371) | Cod sursa (job #1843406)
#include <bits/stdc++.h>
using namespace std;
int n,m,arb[400020],Val,Pos,maxim,X,A,B;
inline void Update(int nod, int left, int right){
if ( left == right ){
arb[nod] = Val;
return;
}
int div = (left+right)/2;
if ( Pos <= div ) Update(2*nod,left,div);
else Update(2*nod+1,div+1,right);
arb[nod] = max( arb[2*nod], arb[2*nod+1] );
}
inline void Query(int nod, int left, int right){
if ( A <= left && right <= B ){
if ( maxim < arb[nod] ) maxim = arb[nod];
return;
}
int div = (left+right)/2;
if ( A <= div ) Query(2*nod,left,div);
if ( div < B ) Query(2*nod+1,div+1,right);
}
int main(){
ifstream fin("arbint.in");
ofstream fout("arbint.out");
ios_base::sync_with_stdio(0);
fin.tie(0);
fin>>n>>m;
for (int i(1);i<=n; i++){
fin>>X;
Pos =i,Val =X;
Update(1,1,n);
}
for ( int i (1); i <=m; i++)
{
fin>>X>>A>>B;
if (X == 0){
maxim =INT_MIN;
Query(1,1,n);
fout<<maxim<<endl;
}
else{
Pos =A,Val =B;
Update(1,1,n);
}
}
return 0;
}