Pagini recente » Cod sursa (job #977909) | Cod sursa (job #2875619) | Cod sursa (job #1123960) | Cod sursa (job #1983490) | Cod sursa (job #592862)
Cod sursa(job #592862)
# include <cstdio>
# define min( a, b ) a < b ? a : b
using namespace std;
int n, m, x, y, d, lin;
int lgr[ 100001 ], a[ 20 ][ 100001 ];
FILE *f, *g;
int main () {
f = fopen ( "rmq.in", "rt" );
g = fopen ( "rmq.out", "wt" );
fscanf ( f, "%d%d", &n, &m );
for ( int i = 1; i <= n; ++i )
fscanf ( f, "%d", &a[ 0 ][ i ] );
for ( int i = 2; i <= n; ++i )
lgr[ i ] = lgr[ i >> 1 ] + 1;
for ( int i = 1; ( 1 << i ) <= n; ++i )
for ( int j = 1; j <= n - ( 1 << i ) + 1; ++j )
a[ i ][ j ] = min ( a[ i - 1 ][ j ], a[ i - 1 ][ j + ( 1 << ( i - 1 ) ) ] );
for ( int i = 1; i <= m; ++i ) {
fscanf ( f, "%d%d", &x, &y );
d = y - x + 1;
lin = lgr[ d ];
fprintf ( g, "%d\n", min( a[ lin ][ x ], a[ lin ][ x + d - ( 1 << lin ) ] ) );
}
fclose ( f );
fclose ( g );
return 0;
}