Pagini recente » Cod sursa (job #360291) | Cod sursa (job #1936532) | Cod sursa (job #1789344) | Cod sursa (job #343010) | Cod sursa (job #1193237)
#include <cstdio>
using namespace std;
#define min(a,b) ((a<b) ? a : b)
#define NMAX 100005
#define LgMAX 25
int D[LgMAX][NMAX];
int log[NMAX];
int N;
int Query(int X,int Y)
{
int k=log[Y-X];
return min(D[k][X],D[k][Y-(1<<k)+1]);
}
void Build_RMQ()
{
int i,j;
for (i=1;i<=log[N];++i)
for (j=1;j<=N-(1<<(i-1));++j)
D[i][j]=min(D[i-1][j],D[i-1][j+(1<<(i-1))]);
}
void Build_log()
{
for (int i=2;i<=N;++i)
log[i]=log[i/2]+1;
}
void Read()
{
int i,M,X,Y;
scanf("%d%d",&N,&M);
for (i=1;i<=N;++i)
scanf("%d",&D[0][i]);
Build_log();
Build_RMQ();
while (M--)
{
scanf("%d%d",&X,&Y);
printf("%d\n",Query(X,Y));
}
}
int main()
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
Read();
return 0;
}