Pagini recente » Cod sursa (job #1585014) | Cod sursa (job #1825052) | Cod sursa (job #1342001) | Cod sursa (job #252557) | Cod sursa (job #2373527)
#include <bits/stdc++.h>
using namespace std;
#define LMAX 100005
#define LG_MAX 20
int RMQ[LG_MAX][LMAX];
int lg2[LMAX];
void precalc(){
lg2[1]=0;
for(int i=2;i<=LMAX-5;++i)
lg2[i]=lg2[i/2]+1;
}
int main(){
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
precalc();
int n,q;
scanf("%d %d",&n,&q);
for(int i=1;i<=n;++i)
scanf("%d ",&RMQ[0][i]);
for(int i=1;i<=lg2[n];++i)
for(int j=1;j+(1<<i)-1<=n;++j){
RMQ[i][j]=min(RMQ[i-1][j],RMQ[i-1][j+(1<<(i-1))]);
}
for(int i=1;i<=q;++i){
int st,dr;
scanf("%d %d",&st,&dr);
int k=lg2[dr-st+1];
printf("%d\n",min(RMQ[k][st],RMQ[k][dr-(1<<k)+1]) );
}
return 0;
}