Pagini recente » Cod sursa (job #2332812) | Cod sursa (job #458325) | Cod sursa (job #563372) | Cod sursa (job #2907585) | Cod sursa (job #1362292)
#include <iostream>
#include <cstdio>
using namespace std;
int i,j,M[100001][100],n,m,V[100001];
int main()
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
scanf("%d %d",&n,&m);
for (i=0;i<n;i++) {scanf("%d",&V[i]);M[i][0]=V[i];}
int k=1;
for (j = 1; 1 << j <= n; j++)
for (i = 0; i + (1 << j) - 1 < n; i++)
if (M[i][j - 1] < M[i + (1 << (j - 1))][j - 1])
M[i][j] = M[i][j - 1];
else
M[i][j] = M[i + (1 << (j - 1))][j - 1];
for (i=0;i<m;i++)
{
int a,b;
scanf("%d %d",&a,&b);
a--; b--;
int x=0;
int aux;
if (a>b) {aux=b;b=a;a=aux;}
while(1<<(x+1)<=b-a) x++;
cout<<min(M[a][x],M[b-(1<<x)+1][x])<<'\n';
}
}