Pagini recente » Cod sursa (job #714726) | Cod sursa (job #3285519) | Cod sursa (job #1980515) | Cod sursa (job #482710) | Cod sursa (job #1000630)
#include<cstdio>
using namespace std;
int din[20][100007], vlog[100007];
int main()
{
freopen("rmq.in", "r", stdin);
freopen("rmq.out", "w", stdout);
int n, m, i, j, a, b, l, nr;
scanf("%d %d", &n, &m);
for(i = 1; i <= n; ++ i)
scanf("%d", &din[0][i]);
for(i = 1; (1 << i) <= n; ++ i)
for(j = 1; j <= n - (1 << i) + 1; ++ j)
{
if(din[i-1][j] < din[i-1][j + (1 << (i - 1))])
din[i][j] = din[i - 1][j];
else
din[i][j] = din[i - 1][j + (1 << (i - 1))];
}
vlog[1] = 0;
for(i = 2; i <= n; ++ i)
vlog[i] = vlog[i >> 1] + 1;
for(i = 1; i <= m; ++ i)
{
scanf("%d %d", &a, &b);
l = vlog[b - a + 1];
nr = b - a + 1 - (1 << l);
if(din[l][a] < din[l][a + nr])
printf("%d\n", din[l][a]);
else
printf("%d\n", din[l][a + nr]);
}
return 0;
}