Pagini recente » Cod sursa (job #2912329) | Cod sursa (job #1153526) | Cod sursa (job #992563) | Cod sursa (job #521501) | Cod sursa (job #1503545)
#include <stdio.h>
#define MAX_N 100000
int T[2 * MAX_N];
int n;
inline int MAX(int A, int B) {
return A > B ? A : B;
}
void aintSet(int x, int key) {
int q;
x += n;
T[x] = key;
while ( x > 1 ) {
q = x >> 1;
T[q] = MAX( T[x], T[x ^ 1] );
x = q;
}
}
int aintQuery(int x, int y) {
int q = -1;
x += n;
y += n;
while ( x < y ) {
if ( x & 1 ) {
q = MAX( q, T[x] );
x++;
}
if ( y & 1 ) {
y--;
q = MAX( q, T[y] );
}
x >>= 1;
y >>= 1;
}
return q;
}
int main(void) {
FILE *fin = fopen("arbint.in", "r");
FILE *fout = fopen("arbint.out", "w");
int m, i;
int opType, x, y;
fscanf( fin, "%d%d", &n, &m );
for ( i = 0; i < n; i++ ) {
fscanf( fin, "%d", &T[i + n] );
}
for ( i = n - 1; i > 0; i-- ) {
T[i] = MAX( T[i << 1], T[(i << 1) | 1] );
}
for ( i = 0; i < m; i++ ) {
fscanf( fin, "%d%d%d", &opType, &x, &y );
if ( opType == 0 ) {
fprintf( fout, "%d\n", aintQuery( x - 1, y ) );
} else {
aintSet( x - 1, y );
}
}
fclose(fin);
fclose(fout);
return 0;
}