Pagini recente » Cod sursa (job #2251977) | Cod sursa (job #768629) | Borderou de evaluare (job #2058013) | Borderou de evaluare (job #1389938) | Cod sursa (job #1161077)
#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];
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 = 0; (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 x, y; M; M-- ) {
scanf("%d %d", &x, &y);
int k;
for ( k = 0; y - (1<<k) + 1 >= x; k++); k--;
printf("%d\n", min(RMQ[x][k], RMQ[y - (1<<k) + 1][k]));
}
return 0;
}