Pagini recente » Cod sursa (job #2660042) | Cod sursa (job #1225293) | Cod sursa (job #2372267) | Cod sursa (job #2455886) | Cod sursa (job #1161107)
#include <cstdio>
#include <algorithm>
#include <cstring>
#define FILEIN "rmq.in"
#define FILEOUT "rmq.out"
#define NMAX 100005
#define LGNMAX 18
#define INF 0x3f3f3f3f
using namespace std;
int RMQ[NMAX][LGNMAX];
int N, M;
int V[NMAX];
int LG[NMAX];
void precompute() {
memset(RMQ, INF, sizeof(RMQ));
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-1)) + i <= 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;
}