Pagini recente » Cod sursa (job #1249810) | Cod sursa (job #3306627) | Cod sursa (job #1262646) | Cod sursa (job #2358135) | Cod sursa (job #998473)
Cod sursa(job #998473)
#include<stdio.h>
#define NMAX 100007
int D[19][NMAX], Lg[NMAX];
int n, m, a, b;
inline int min(int a, int b){
if(a < b)
return a;
return b;
}
int main(){
freopen("rmq.in", "r", stdin);
freopen("rmq.out", "w", stdout);
scanf("%d %d", &n, &m);
for(int i = 1; i <= n; ++ i)
scanf("%d", &D[0][i]);
for(int i = 1; (1 << i) <= n; ++ i)
for(int j = 1; j <= n - (1 << i) + 1; ++ j)
D[i][j] = min(D[i - 1][j], D[i - 1][j + (1 << (i - 1))]);
Lg[1] = 0;
for(int i = 2; i <= n; ++ i)
Lg[i] = Lg[i / 2] + 1;
for(int i = 1; i <= m; ++ i){
scanf("%d %d", &a, &b);
int l = Lg[b - a + 1];
int Number = b - a + 1 - (1 << l);
printf("%d\n",min(D[l][a], D[l][a + Number]));
}
}