Pagini recente » Cod sursa (job #2472372) | Cod sursa (job #457958) | Cod sursa (job #703928) | Cod sursa (job #1696174) | Cod sursa (job #920976)
Cod sursa(job #920976)
#include <cstdio>
#include <cmath>
#define NMAX 100001
#define LOGMAX (int)log(NMAX)
int V[NMAX],n,m;
int M[NMAX][20];
inline int RMQ(int i,int j){
int k = log(j-i+1);
if(V[M[i][k]] < V[M[j-(1<<k)+1][k]])
return V[M[i][k]];
else return V[M[j-(1<<k)+1][k]];
}
int main(){
int i,j;
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
scanf("%d%d",&n,&m);
for(register int i=0;i<n;++i)
scanf("%d",&V[i]);
for(register int i=0;i<n;++i)
M[i][0] = i;
for(register int j=1;(1<<j)<=n;++j)
for(register int i=0;i+(1<<j)-1<n;++i)
if(V[M[i][j-1]] < V[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];
while(m){
scanf("%d%d",&i,&j);
i--,j--;
printf("%d\n",RMQ(i,j));
--m;
}
return 0;
}