Pagini recente » Cod sursa (job #382398) | Cod sursa (job #173442) | Cod sursa (job #426049) | Cod sursa (job #1570479) | Cod sursa (job #1234235)
#include <cstdio>
using namespace std;
const char InFile[]="rmq.in";
const char OutFile[]="rmq.out";
const int DIMN=100010;
const int DIMLG=20;
inline int MIN(int a,int b)
{
return ((a>b)?b:a);
}
int n,m,v[DIMN],s[DIMN][DIMLG],lg[DIMN];
int main()
{
int i,j,t,l,a,b,dif;
freopen(InFile,"r",stdin);
freopen(OutFile,"w",stdout);
scanf("%d %d",&n,&m);
lg[1]=0;
for(i=2;i<n;++i)
lg[i]=lg[i/2]+1;
for(i=1;i<=n;++i)
scanf("%d",&v[i]);
for(i=1;i<=n;++i)
s[i][0]=i;
for(j=1;(1<<j)<=n;++j)
{
for(i=0;i+(1<<j)-1<=n;++i)
{
if(v[s[i][j-1]]<=v[s[i+(1<<(j-1))][j-1]])
s[i][j]=s[i][j-1];
else s[i][j]=s[i+(1<<(j-1))][j-1];
}
}
for(i=1;i<=m;++i)
{
scanf("%d %d",&a,&b);
dif=b-a+1;
l=lg[dif];
t=dif-(1<<l);
printf("%d\n",MIN(v[s[a][l]],v[s[a+t][l]]));
}
return 0;
}