Pagini recente » Cod sursa (job #1574766) | Cod sursa (job #1794968) | Cod sursa (job #2852279) | Cod sursa (job #152453) | Cod sursa (job #1640284)
#include <cstdio>
#define NMAX 100005
using namespace std;
int x,y,n,m,i,j;
int rmq[20][NMAX];
int lg[NMAX],v[NMAX];
int main()
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
scanf("%d%d",&n,&m);
for(i=1;i<=n;++i)
{
scanf("%d",&v[i]);
rmq[0][i]=i;
}
for(i=1;(1<<i) <= n;++i)
for(j=1; j+(1<<i)-1 <=n; ++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];
}
lg[2]=1;
for(i=3;i<=n;++i) lg[i]=lg[i/2]+1;
for(i=1;i<=m;++i)
{
scanf("%d%d",&x,&y);
int l=lg[(y-x+1)];
int dif=(y-x+1) - (1<<l);
if(v[rmq[l][x]] < v[rmq[l][x+dif]]) printf("%d\n",v[rmq[l][x]]);
else printf("%d\n",v[rmq[l][x+dif]]);
}
return 0;
}