Pagini recente » Cod sursa (job #350418) | Istoria paginii runda/oji2006/clasament | Cod sursa (job #2405284) | Cod sursa (job #473557) | Cod sursa (job #1027986)
#include <stdio.h>
using namespace std;
#define fr(i,a,b) for(int i=a;i<=b;++i)
#define N 1000010
#define ll long int
#define MIN(a,b) a<b?a:b
ll n,m;
ll rmq[20][N];
ll lg[N];
ll t[N];
int main()
{
freopen("rmq.in","r",stdin);
//freopen("rmq.out","w",stdout);
ll l;
scanf("%ld %ld",&n,&m);
fr(i,1,n) scanf("%ld\n",&t[i]);
lg[1]=0;
fr(i,2,n) lg[i]=lg[i/2]+1;
fr(i,1,n) rmq[0][i]=t[i];
fr(i,1,lg[n])
fr(j,1,n)
{
l=1<<(i-1);
if(j+l<=n)
rmq[i][j]=MIN(rmq[i-1][j],rmq[i-1][j+l]);
else rmq[i][j]=rmq[i-1][j];
}
ll x,y,dif,s;
fr(i,1,m)
{
scanf("%ld %ld",&x,&y);
dif=y-x+1;
l=lg[dif];
s=y-(1<<l)+1;
printf("%ld\n",MIN(rmq[l][x],rmq[l][s]));
}
}