Pagini recente » Cod sursa (job #2414139) | Cod sursa (job #102080) | Cod sursa (job #1554585) | Cod sursa (job #2169115) | Cod sursa (job #484847)
Cod sursa(job #484847)
#include<stdio.h>
#include<algorithm>
#define log 18
#define Nmax 100100
using namespace std;
int rmq[log][Nmax],x,y,maxi,sh;
int v[Nmax];
int lg[Nmax],N,M;
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]);
/* for(int i=1;i<=N;++i)
printf("%d ",v[i]);
printf("\n");*/
for(int i=2;i<=N;++i)
lg[i]=lg[i/2]+1;
for(int i=1;i<=N;++i)
rmq[0][i]=v[i];
v[0]=-1;
for(int i=1;(1<<i)<=N;++i)
{
for(int j=1;j+(1<<i)-1<=N;++j)
{
maxi=1<<(i-1);
rmq[i][j]=min(rmq[i-1][j],rmq[i-1][j+maxi]);
}
}
for(int i=1;i<=M;++i)
{
scanf("%d%d",&x,&y);
maxi=lg[y-x+1];
sh=y-x+1-(1<<maxi);
// printf("%d %d %d %d\n",x,x+(1<<maxi),x+sh,x+sh+(1<<maxi));
printf("%d\n",min(rmq[maxi][x],rmq[maxi][x+sh]));
}
}