Pagini recente » Cod sursa (job #2169970) | Cod sursa (job #2892162) | Cod sursa (job #1560293) | Cod sursa (job #2624449) | Cod sursa (job #412883)
Cod sursa(job #412883)
#include<fstream>
#define max 100005
using namespace std;
int v[max],MAX;
int A[4*max];
int n,m,val,poz,AA,B;
inline int maxim( int a, int b){ return a>b?a:b; }
void UPDATE( int nod, int i, int j){
int mij;
if ( i>=j) {A[nod] = val;return;}
mij = ( i+j )/2;
if( poz <= mij ) UPDATE( nod*2 , i, mij);
else UPDATE( nod*2 + 1 , mij+1, j);
A[ nod ] = maxim ( A[ nod*2] , A[ nod*2 + 1] );
}
void QUERY( int nod, int st, int dr){
if( AA<=st && dr<=B ) { MAX = maxim( MAX, A[nod] );return; }
int mij = ( st + dr ) / 2;
if( AA <= mij ) QUERY( nod*2 , st, mij);
if(B > mij ) QUERY( nod*2 + 1 , mij+1, dr);
}
int main(){
ifstream f("arbint.in");
ofstream g("arbint.out");
f>>n>>m;
int i,o,a,b;
for( i=1; i<=n; i++) { f>>v[i]; poz=i; val = v[i];UPDATE(1,1,n); }
for( ; m-- ; ){
f>>o>>a>>b;
if( o ){val=b;poz=a; UPDATE( 1, 1, n);}
else{
MAX = -1;
AA=a;
B=b;
QUERY( 1, 1,n);
g<<MAX<<'\n';
}
}
return 0;
}