Pagini recente » Cod sursa (job #2038081) | Cod sursa (job #426940) | Cod sursa (job #2214087) | Cod sursa (job #2058110) | Cod sursa (job #2275265)
#include <cstdio>
#include <algorithm>
using namespace std;
int n,m,x,y,a[100050], r[20][100050];
int lg[100050],k,i,j,l,dif;
int main()
{
freopen ("rmq.in", "r", stdin);
freopen ("rmq.out", "w", stdout);
scanf ("%d%d", &n, &m );
for ( i=1; i <= n ;i ++)
{
scanf ("%d", &a[i]);
r[0][i] = a[i];
}
for(i=1; (1<<i)<=n;i++)
for (j=1; j<=n-(1<<i)+1; j++)
{
k =(1<<(i-1));
r[i][j]=min(r[i-1][j], r[i-1][j+k]);
}
lg[1]=0;
for (i=2; i<=n; i++)
lg[i]=lg[i/2]+1;
for (i=1; i<=m; i++)
{
scanf ("%d%d", &x, &y );
dif=y-x+1;
k=lg[dif];
printf("%d\n", min(r[k][x], r[k][y-(1<<k)+1]));
}
return 0;
}