Pagini recente » Cod sursa (job #2828085) | Cod sursa (job #1125251) | Cod sursa (job #82165) | Cod sursa (job #517915) | Cod sursa (job #2282680)
#include <cstdio>
#include <algorithm>
using namespace std;
const int N=100000+5;
const int LG=17;
int n,q;
int ret[N][LG];
int lg[N];
int main()
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
scanf("%d%d",&n,&q);
for(int i=1;i<=n;i++)
{
scanf("%d",&ret[i][0]);
}
for(int i=2;i<N;i++)
{
lg[i]=lg[i/2]+1;
}
for(int k=1;(1<<k)<=n;k++)
{
for(int i=1;i+(1<<k)-1<=n;i++)
{
ret[i][k]=min(ret[i][k-1],ret[i+(1<<(k-1))][k-1]);
}
}
while(q--)
{
int st,dr;
scanf("%d%d",&st,&dr);
int k=lg[dr-st+1];
int ans=min(ret[st][k],ret[dr-(1<<k)+1][k]);
printf("%d\n",ans);
}
return 0;
}