Pagini recente » Cod sursa (job #2584211) | Cod sursa (job #621324) | Cod sursa (job #71881) | Cod sursa (job #1886457) | Cod sursa (job #1843410)
#include <bits/stdc++.h>
using namespace std;
int n,m,arb[400100],Val,Pos,maxim,X,A,B;
int A1,B1;
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 ( A1 <= left && right <= B1 ){
if ( maxim < arb[nod] ) maxim = arb[nod];
return;
}
int div = (left+right)/2;
if ( A1 <= div ) Query(2*nod,left,div);
if ( div < B1 ) 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;
A1=A;B1=B;
Query(1,1,n);
fout<<maxim<<'\n';
}
else{
Pos =A,Val =B;
Update(1,1,n);
}
}
}