Cod sursa(job #433825)
#include <stdio.h>
#include <algorithm>
#define IN "rmq.in"
#define OUT "rmq.out"
#define L 100005
#define I 18
using namespace std;
int rmq[I][L];
int n, m;
int put[L];
void citire()
{
scanf ("%d %d", &n, &m);
for (int i=1;i<=n;i++)
scanf ("%d ",&rmq[0][i]);
}
void solve()
{
int R ,R1;
for (int i=2;i<=n;i++)
put[i]=put[i>>1]+1;
for (int i=1;i<=put[n];i++)
{
R=(1<<i)-1;
R1=(1<<(i-1));
for (int j=1;j<=n-R;j++)
rmq[i][j]=min(rmq[i-1][j], rmq[i-1][j+R1]);
}
}
void afisare()
{
int a, b, c;
for (int i=0;i<m;i++)
{
scanf ("%d %d", &a, &b);
c=put[b-a+1];
printf("%d\n", min(rmq[c][a], rmq[c][b-(1<<c)+1]));
}
}
int main ()
{
freopen (IN ,"r", stdin);
freopen (OUT ,"w", stdout);
citire();
solve();
afisare();
return 0;
}