Pagini recente » Cod sursa (job #2609817) | Cod sursa (job #2660878) | Cod sursa (job #1143853) | Cod sursa (job #1301833) | Cod sursa (job #1161089)
#include <cstdio>
#include <algorithm>
#define FILEIN "rmq.in"
#define FILEOUT "rmq.out"
#define NMAX 100005
#define LGNMAX 18
using namespace std;
int RMQ[NMAX][LGNMAX];
int N, M;
int V[NMAX];
int LG[NMAX];
void precompute() {
for ( int i = 1; i <= N; i++ ) {
RMQ[i][0] = V[i];
}
for ( int j = 1; (1 << j) <= N; j++ ) {
for ( int i = 1; (1 << j) + i - 1 <= N; i++ ) {
RMQ[i][j] = min(RMQ[i][j-1], RMQ[i + (1 << j) - 1][j-1]);
}
}
}
int main() {
freopen(FILEIN, "r", stdin);
freopen(FILEOUT, "w", stdout);
scanf("%d %d", &N, &M);
for ( int i = 1; i <= N; i++ ) scanf("%d", &V[i]);
precompute();
for ( int i = 2; i <= N; i++ ) {
LG[i] = LG[i/2] + 1;
}
for ( int x, y; M; M-- ) {
scanf("%d %d", &x, &y);
int k = LG[y-x+1];
printf("%d\n", min(RMQ[x][k], RMQ[y - (1<<k) + 1][k]));
}
return 0;
}