Pagini recente » Cod sursa (job #2158398) | Cod sursa (job #2569467) | Cod sursa (job #2577087) | Cod sursa (job #538638) | Cod sursa (job #910152)
Cod sursa(job #910152)
#include <iostream>
#include <fstream>
using namespace std;
#define Nmax 400001
int N, M, x, a, b;
int Arb[Nmax];
int start, finish, val, pos, maxim;
ifstream f("arbint.in");
ofstream g("arbint.out");
void update ( int nod, int left, int right ) {
if ( left == right ){
Arb[nod] = val;
return;
}
int m = ( left + right ) / 2;
if ( pos <= m )
update ( 2 * nod, left, m );
else
update ( 2 * nod + 1, m + 1, right );
Arb[nod] = max ( Arb[ 2 * nod ], Arb[ 2 * nod + 1] );
}
void query ( int nod, int left, int right ) {
if ( start <= left && right <= finish ){
maxim = max ( maxim, Arb[nod] );
return;
}
int m = ( left + right ) / 2;
if ( start <= m )
query ( 2 * nod, left, m );
if ( m < finish )
query ( 2 * nod + 1, m + 1, right );
}
void citire(){
f >> N >> M;
for ( int i = 1; i <= N; ++i ) {
f >> x;
pos = i;
val = x;
update ( 1, 1, N );
}
for ( int i = 1; i <= M; ++i ) {
f >> x >> a >> b;
if ( x == 0 ){
maxim = -1;
start = a;
finish = b;
query ( 1, 1, N );
g << maxim << "\n";
}
else{
pos = a;
val = b;
update ( 1, 1, N );
}
}
}
int main(){
citire();
return 0;
}