Pagini recente » Cod sursa (job #322057) | Cod sursa (job #1680235) | Cod sursa (job #1797098) | Cod sursa (job #1690774) | Cod sursa (job #163119)
Cod sursa(job #163119)
#include<stdio.h>
int v, i, j, m, n, x, y, lg, pt[20], a[20][100001];
inline int min(int a, int b){
if (a < b)
return a;
return b;
}
int main()
{
freopen("rmq.in", "rt", stdin);
freopen("rmq.out", "wt", stdout);
scanf("%d%d", &n, &m);
for (i = 1; i <= n; i ++){
scanf("%d", &v);
a[0][i] = v;
}
pt[0] = 1;
for (i = 1; i < 18; i ++)
pt[i] = 2*pt[i-1];
for (i = 0; pt[i] < n; i ++)
for (j = 1; j <= n; j ++)
a[i+1][j] = min(a[i][j], a[i][j + pt[i]]);
for (i = 1; i <= m; i ++){
scanf("%d%d", &x, &y);
lg = y-x+1;
for (j = 17; j >= 0; j --)
if (pt[j] <= lg)
break;
printf("%d\n", min(a[j][x], a[j][y-pt[j]+1]));
}
return 0;
}