Pagini recente » Cod sursa (job #1952003) | Cod sursa (job #3263189) | Cod sursa (job #1923843) | Cod sursa (job #183617) | Cod sursa (job #1234057)
#include <cstdio>
using namespace std;
const char InFile[]="rmq.in";
const char OutFile[]="rmq.out";
const int DIMN=100010;
const int DIMS=20;
inline int MIN(int a, int b)
{
return ((a>b)?b:a);
}
int N,M,lgn,v[DIMN],t[DIMN][DIMS],lg[DIMN];
int main()
{
int a,b,Min,l,k;
freopen(InFile,"r",stdin);
freopen(OutFile,"w",stdout);
scanf("%d %d",&N,&M);
for(int i=0;i<N;++i)
scanf("%d",&v[i]);
for(int i=0;i<N;++i)
t[i][0]=i;
lg[0]=0;
for(int i=1;i<N;++i)
{
lg[i]=lg[i/2]+1;
}
for(int j=1;(1<<j)<=N;++j)
{
for(int i=0; i+(1<<j)-1<N;++i)
{
if(v[t[i][j-1]]<v[t[i+(1<<(j-1))][j-1]])
t[i][j]=t[i][j-1];
else t[i][j]=t[i+(1<<(j-1))][j-1];
}
}
for(int i=1;i<=M;++i)
{
Min=0;
scanf("%d %d",&a,&b);
l=lg[b-a-1];
k=b-(1<<l);
printf("%d\n",MIN(v[t[a-1][l]],v[t[k][l]]));
}
return 0;
}