Pagini recente » Cod sursa (job #637468) | Cod sursa (job #1715540) | Istoria paginii runda/simulare1112judeteana | Istoria paginii runda/nstr/clasament | Cod sursa (job #175533)
Cod sursa(job #175533)
#include <stdio.h>
#define NX ( 1<<17 )
#define LX 17
int N, M, a[ NX ][ LX ], v[ NX ];
int i, j, k, x, y;
void cit() {
scanf( "%d%d", &N, &M );
for( i = 1; i <= N; i++ )
scanf( "%d", v+i );
for( i = 1; i <= N; i++ )
a[i][0] = i;
for( j = 1, k = 2; k <= N; j++, k <<= 1 )
for( i = 1; i+k <= N+1; i++ )
a[i][j] = ( v[ a[i][j-1] ] < v[ a[ i + (k>>1) ][j-1] ] ) ? a[i][j-1] : a[ i + (k>>1) ][j-1];
while( M-- ) {
scanf( "%d%d", &x, &y );
for( k = 1; (1<<k) < y - x + 1; k++ ); k--;
printf( "%d\n", v[ a[x][k] ] < v[ a[y-(1<<k)+1][k] ] ? v[ a[x][k] ] : v[ a[y-(1<<k)+1][k] ] );
}
}
int main() {
freopen( "rmq.in", "r", stdin );
freopen( "rmq.out", "w", stdout );
cit();
return 0;
}