Pagini recente » Cod sursa (job #1850014) | Cod sursa (job #1742536) | Cod sursa (job #1071107) | Cod sursa (job #400969) | Cod sursa (job #288841)
Cod sursa(job #288841)
#include<stdio.h>
#define N 100004
int n, m, a[N][20];
void citire(), rezolva();
inline int min(int a, int b){if (a<b) return a; else return b;}
int main(){
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
citire();
rezolva();
return 0;
}
void citire(){
int i;
scanf("%d %d", &n, &m);
for (i = 1; i <= n; i++) scanf("%d", &a[i][0]);
}
void rezolva(){
int j, q, i, x, y, l, k;
for (j = 1, q = 2; q <= n; j++, q <<= 1 )
for (i = 1; i <= n - q + 1; i++){
a[i][j] = a[i][j-1];
if (a[i][j] > a[i + (q >> 1)][j-1])
a[i][j] = a[i + (q >> 1)][j-1];
}
for (; m; m--){
scanf("%d %d", &x, &y);
for (k = y - x + 1, l = 0, q = 2; q <= k; l++, q <<= 1);
printf("%d\n", min(a[x][l] , a[y - (q >> 1) + 1][l]) );
}
}