Pagini recente » Cod sursa (job #2678801) | Cod sursa (job #2466886) | Cod sursa (job #3179459) | Cod sursa (job #2644236) | Cod sursa (job #1226062)
#include <iostream>
#include <cstdio>
#include <math.h>
#include <algorithm>
using namespace std;
const int MAXN = 100000,LOGMAXN = 20;
int M[MAXN][LOGMAXN],A[100000],n;
void process(int N)
{
int i, j;
for (i = 0; i < N; i++)
M[i][0] = i;
for (j = 1; 1 << j <= N; j++)
for (i = 0; i + (1 << j) - 1 < N; i++)
M[i][j] = A[M[i][j - 1]] < A[M[i + (1 << (j - 1))][j - 1]] ? M[i][j - 1] : M[i + (1 << (j - 1))][j - 1];
}
void rmq(int i, int j){
int k = (int)(log10((double)(j - i + 1)) / log10(2.0));
printf("%d\n",min(A[M[i][k]], A[M[j - (1 << k) + 1][k]]) ) ;
}
int main(){
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
int q;
scanf("%d%d",&n,&q);
for(int i = 0; i < n; i++)
scanf("%d",&A[i]);
process(n);
for(int i = 0; i < q; i++){
int s,t;
scanf("%d%d",&s,&t);
rmq(s - 1, t - 1);
}
return 0;
}