Pagini recente » Cod sursa (job #1871184) | Cod sursa (job #2709052) | Cod sursa (job #2681979) | Cod sursa (job #3295255) | Cod sursa (job #211520)
Cod sursa(job #211520)
#include <cstdio>
#include <algorithm>
using namespace std;
#define MAXN 100005
#define MAXL 18
int N, M;
int d[MAXL][MAXN];
int lg[MAXN];
int main (){
freopen ("rmq.in", "r", stdin);
freopen ("rmq.out", "w", stdout);
int i, j;
scanf ("%d %d\n", &N, &M);
for (i = 1; i <= N; ++ i){
i != 1 ? lg[i] = lg[(i>>1)] + 1 : lg[i] = 0;
scanf("%d\n", &d[0][i]);
}
for (i = 1; i <= lg[N]; ++ i)
for (j = 1; j <= N - (1<<i) + 1; ++ j)
d[i][j] = min (d[i-1][j], d[i-1][j + (1<<(i-1))]);
/*for (i = 0; i <= lg[N]; ++ i, printf ("\n"))
for (j = 1; j <= N; printf ("%d ", d[i][j]), ++ j)*/;
int a, b, lg_ab;
for (i = 1; i <= M; ++ i){
scanf ("%d %d\n", &a, &b);
lg_ab = lg[b - a];
printf ("%d\n", min (d[lg_ab][a], d[lg_ab][b - (1<<lg_ab) + 1]));
}
return 0;
}