Pagini recente » Cod sursa (job #75877) | Cod sursa (job #74600) | Cod sursa (job #2847844) | Cod sursa (job #1025348) | Cod sursa (job #739684)
Cod sursa(job #739684)
#include <cstdio>
#include <cmath>
#include <algorithm>
#define MAX 100001
using namespace std;
int M[MAX][20],V[MAX],n,m;
void RMQ(){
int i,j;
for(i=0;i<n;i++)M[i][0]=V[i];
for(j=1;(1<<j)<=n;j++)
for(i=0;i+(1<<(j-1))<=n;i++)
M[i][j]=min(M[i][j-1],M[i+(1<<(j-1))][j-1]);
// for(i=0;i<=n;i++){
// for(j=0;j<=5;j++)printf("%d ",M[i][j]); printf("\n"); }
}
int main(){
int x,y,k;
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
scanf("%d %d",&n,&m);
for(int i=0;i<n;i++)scanf("%d",&V[i]);
RMQ();
for(int i=0;i<m;i++){
scanf("%d %d",&x,&y);
k=(long double)log10(y-x+1)/(long double)log10(2);
printf("%d\n",min(M[x-1][k],M[y-(1<<k)][k]));
}
}