Pagini recente » Cod sursa (job #1861871) | Cod sursa (job #2209632) | Cod sursa (job #2765266) | Cod sursa (job #76146) | Cod sursa (job #1412230)
#include <cstdio>
#define NMAX 100005
#define min(a,b) ( a < b ? a : b)
using namespace std;
int n,m,x,y,dif,sh;
int lg[NMAX],v[NMAX];
int rmq[20][NMAX];
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",&v[i]);
rmq[0][i]=i;
}
for(int i = 2; i <= n; ++i)
lg[i] = lg[i/2] + 1;
for(int i = 1; (1<<i) <= n; ++i)
for(int j = 1; j + (1<<i) -1 <= n; ++j)
{
int l = (1 << (i-1));
if (v[rmq[i-1][j]] < v[rmq[i-1][j+l]]) rmq[i][j] = rmq[i-1][j];
else rmq[i][j] = rmq[i-1][j+l];
}
for(int i = 1;i <= m; ++i)
{
scanf("%d%d",&x,&y);
dif = y - x + 1;
int l = lg[dif];
sh = dif - (1<<l);
printf("%d\n",min(v[rmq[l][x]],v[rmq[l][x+sh]]));
}
return 0;
}