Pagini recente » Cod sursa (job #393963) | Cod sursa (job #620846) | Cod sursa (job #1737157) | Cod sursa (job #181925) | Cod sursa (job #1771949)
#include <bits/stdc++.h>
using namespace std;
#define NMAX 100005
#define LMAX 18
int n,RMQ[LMAX][NMAX],m,v[NMAX],lg[NMAX];
int ans(int a,int b)
{
int diff=b-a+1,l=lg[diff], sh=diff-(1<<l);
return min(v[RMQ[l][a]],v[RMQ[l][a+sh]]);
}
int main()
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
scanf("%d %d",&n,&m);
for (int i=1;i<=n;i++)
{
scanf("%d",&v[i]);
RMQ[0][i]=i;
if (i>1) lg[i]=lg[i>>1]+1;
}
for (int i=1;(1<<i)<=n;i++)
{
for (int j=1;j<=n-(1<<i)+1;j++)
{
int l=1<<(i-1);
if (v[RMQ[i-1][j]]<v[RMQ[i-1][j+l]])
RMQ[i][j]=RMQ[i-1][j];
else RMQ[i][j]=RMQ[i-1][j+l];
}
}
int a,b;
while (m--)
{
scanf("%d %d",&a,&b);
printf("%d\n",ans(a,b));
}
return 0;
}