Pagini recente » Cod sursa (job #2671400) | Cod sursa (job #2977958) | Cod sursa (job #2635894) | Cod sursa (job #333700) | Cod sursa (job #1403247)
#include <cstdio>
#include <algorithm>
using namespace std;
#define Nmax 100002
#define Lmax 18
FILE *f = fopen ( "rmq.in", "r" );
FILE *g = fopen ( "rmq.out", "w" );
int RMQ[Lmax][Nmax], v[Nmax], lg[Nmax];
int main(){
int N, M, x, y;
fscanf ( f, "%d%d", &N, &M );
for ( int i = 1; i <= N; ++i ){
fscanf ( f, "%d", &v[i] );
RMQ[0][i] = v[i];
}
for ( int i = 2; i <= N; ++i )
lg[i] = lg[i>>1] + 1;
for ( int i = 1; ( 1 << i ) <= N; ++i ){
for ( int j = 1; j <= N - ( 1 << i ) + 1; ++j ){
int k = ( 1 << ( i - 1 ) );
RMQ[i][j] = min ( RMQ[i-1][j], RMQ[i-1][j+k] );
}
}
for ( int i = 1; i <= M ; ++i ){
fscanf ( f, "%d%d", &x ,&y );
int dif = y - x + 1;
int k = lg[dif];
int t = dif - ( 1 << k ) ;
fprintf ( g, "%d\n", min ( RMQ[k][x], RMQ[k][x+t] ) );
}
return 0;
}