Pagini recente » Cod sursa (job #2173301) | Cod sursa (job #462823) | Cod sursa (job #2924484) | Cod sursa (job #957892) | Cod sursa (job #1645193)
#include <cstdio>
#include <algorithm>
using namespace std;
int rmq[19][100001],v[100001],lg[100001];
int main()
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
int n,m,i,j,a,b,diff,l,sh;
scanf("%d%d",&n,&m);
for(i=1;i<=n;++i) {
scanf("%d",&v[i]);
rmq[0][i]=v[i];
}
for(i=1;(1<<i)<=n;++i)
{
for(j=1;j<=n-(1<<i)+1;++j)
{
rmq[i][j]=min(rmq[i-1][j],rmq[i-1][j+(1<<(i-1))]);
}
}
for(i=2;i<=n;i++) lg[i]=lg[i/2]+1;
while(m--)
{
scanf("%d%d",&a,&b);
diff=b-a+1;
l=lg[diff];
sh=diff-(1<<l);
printf("%d\n",min(rmq[l][a],rmq[l][a+sh]));
}
}