Pagini recente » Cod sursa (job #2881320) | Cod sursa (job #2595980) | Monitorul de evaluare | Cod sursa (job #869692) | Cod sursa (job #1093141)
#include <cstdio>
#define NMAX 100001
#define minim(a,b) a<b ? a:b
int V[NMAX];
int n,m;
int RMQ[NMAX][18];
int kmax[NMAX];
inline void read(){
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
scanf("%d%d",&n,&m);
for(register int i=1;i<=n;++i)
scanf("%d",&V[i]);
}
inline void query(){
for(register int i=1;i<=n;++i)
RMQ[i][0] = V[i];
for(int j=1;(1<<j)<=n;++j){
for(int i=0;i+(1<<j)-1 <=n;++i)
RMQ[i][j] = minim(RMQ[i][j-1],RMQ[i+(1<<j)-1][j-1]);
}
for(register int i=2;i<=n;++i)
kmax[i] = kmax[i/2] +1;
}
inline void solve(){
int x,y,k;
while(m){
scanf("%d%d",&x,&y);
k = kmax[y-x+1];
printf("%d\n",minim(RMQ[x][k],RMQ[y-(1<<k)+1][k]));
--m;
}
}
int main(){
read();
query();
solve();
return 0;
}