Pagini recente » Cod sursa (job #2169456) | Cod sursa (job #414515) | Cod sursa (job #1283527) | Cod sursa (job #2621045) | Cod sursa (job #1753847)
#include <iostream>
#include <cstdio>
#include <cmath>
#define NMAX 100005
using namespace std;
int N,Q;
int v[NMAX];
int dp[20][NMAX];
int p2[20];
void citire()
{
scanf("%d%d",&N,&Q);
for(int i=1; i<=N; i++)
scanf("%d",&v[i]);
}
void rmq()
{
for(int i=1; i<=N; i++)
dp[0][i]=v[i];
int log2n = log2(N);
for(int i=1; i<=log2n; i++)
for(int j=1; j<=N; j++)
{
int p =j+(1<<(i-1));
dp[i][j]=min(dp[i-1][j],dp[i-1][p]);
}
}
int query(int a, int b)
{
int p = log2(b-a+1);
return min(dp[p][a],dp[p][b-p]);
}
int main()
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
citire();
rmq();
for(int i=1;i<=Q;i++)
{
int x,y;
scanf("%d%d",&x,&y);
printf("%d\n",query(x,y));
}
return 0;
}