Pagini recente » Cod sursa (job #571682) | Cod sursa (job #2545116) | Cod sursa (job #2089361) | Cod sursa (job #2306477) | Cod sursa (job #2172723)
#include <iostream>
#include <cstdio>
using namespace std;
int rmq[16][100005];
int log[100005];
int n,q;
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",&rmq[0][i]);
for(int i=1; i<=16; i++)
log[1<<i]=i;
for(int i=1; i<=100000; i++)
if(log[i]==0)
log[i]=log[i-1];
for(int i=1; (1<<i)<=n; i++)
{
for(int j=1; j+(1<<(i-1))<=n; j++)
{
rmq[i][j]=min(rmq[i-1][j],rmq[i-1][j+(1<<(i-1))]);
}
}
int st,dr;
for(int i=1; i<=q; i++)
{
scanf("%d%d",&st,&dr);
printf("%d\n",min(rmq[log[dr-st]][st],rmq[log[dr-st]][st+(1<<(log[dr-st]-1))]));
}
return 0;
}