Pagini recente » Statistici Boca Bogdan (hunchest4281) | Cod sursa (job #837556) | Cod sursa (job #2205576) | Cod sursa (job #1562914) | Cod sursa (job #2816641)
// Mihai Priboi
#include <stdio.h>
#include <algorithm>
// parsare
FILE *fin, *fout;
#define BUFFER 1 << 14
char buf[BUFFER];
int buf_index = BUFFER;
inline char read_char() {
if( buf_index == BUFFER ) {
fread( buf, 1, BUFFER, fin );
buf_index = 0;
}
return buf[buf_index++];
}
inline int read_int() {
char ch;
int n;
// citim non-cifrele
ch = read_char();
while( ch < '0' || ch > '9' )
ch = read_char();
n = 0;
while( ch >= '0' && ch <= '9' ) {
n = n * 10 + ch - '0';
ch = read_char();
}
return n;
}
//
#define MAXN 100000
#define SQRTN 316
int v[MAXN];
int batog[SQRTN + 1];
int nr_int, int_size;
void construct( int n ) {
int i, j, max;
int_size = 1;
while( int_size * int_size <= n )
int_size++;
int_size--;
nr_int = int_size;
if( nr_int * int_size < n )
nr_int++;
for( i = 0; i < nr_int; i++ ) {
max = 0;
for( j = i * int_size; j < (i + 1) * int_size && j < n; j++ )
max = std::max( max, v[j] );
batog[i] = max;
}
}
int getMax( int a, int b ) {
int max, i, j;
max = 0;
j = a;
i = j / int_size;
if( j > i * int_size ) {
i++;
for( ; j < i * int_size && j <= b; j++ )
max = std::max( max, v[j] );
}
while( b >= (i + 1) * int_size - 1 ) {
max = std::max( max, batog[i] );
i++;
}
for( j = i * int_size; j <= b; j++ )
max = std::max( max, v[j] );
return max;
}
void update( int pos, int val ) {
int i, j, max;
i = pos / int_size;
if( val > batog[i] )
batog[i] = val;
else if( v[pos] == batog[i] ) {
v[pos] = val;
max = 0;
for( j = i * int_size; j < (i + 1) * int_size; j++ )
max = std::max( max, v[j] );
batog[i] = max;
}
v[pos] = val;
}
int main() {
int n, m, i, a, b, op;
fin = fopen( "arbint.in", "r" );
n = read_int(), m = read_int();
for( i = 0; i < n; i++ )
v[i] = read_int();
construct(n);
fout = fopen( "arbint.out", "w" );
for( i = 0; i < m; i++ ) {
op = read_int(), a = read_int(), b = read_int();
if( op == 0 )
fprintf( fout, "%d\n", getMax(a - 1, b - 1) );
else
update(a - 1, b);
}
fclose( fin );
fclose( fout );
return 0;
}