Cod sursa(job #563800)
# include <stdio.h>
using namespace std;
int a[100005][20],lg[100005],x,y,d,q,n,m,i,j,k;
int main ()
{
freopen ("rmq.in","r",stdin);
freopen ("rmq.out","w",stdout);
scanf ("%i%i",&n,&m);
for (i=1;i<=n;i++)
scanf ("%i",&a[i][0]);
for (i=2;i<=n;i++)
lg[i]=lg[i/2]+1;
for (j=1;j<=lg[n];j++)
for (i=1;i<=n && i+(1<<j-1)<=n;i++)
{
k=i+(1<<j-1);
if (a[i][j-1]<a[k][j-1])
a[i][j]=a[i][j-1];
else
a[i][j]=a[k][j-1];
}
for (i=1;i<=m;i++)
{
scanf ("%i%i",&x,&y);
d=y-x+1;
q=lg[d];
if (a[x][q]<a[(y-(1<<q))+1][q])
printf ("%i\n",a[x][q]);
else
printf ("%i\n",a[(y-(1<<q))+1][q]);
}
return 0;
}