Pagini recente » Cod sursa (job #1963925) | Cod sursa (job #96884) | Cod sursa (job #216818) | Cod sursa (job #2383076) | Cod sursa (job #2844853)
#include <fstream>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
const int nmax=100000, nmax2=16, inf=(1<<30)-1;
int v[nmax2+1][nmax+1], log[nmax+1];
int Min(int a, int b){
if(a<=b){
return a;
}else{
return b;
}
}
void test(int n){
int n2=2*n-(n&(n-1));
for(int i=0;(1<<(i-1))<=n;i++){
for(int j=1;j<=n2-(1<<i)+2;j++){
fout<<v[i][j]<<" ";
}
fout<<"\n";
}
fout<<"\n";
}
int main(){
int n,m;
fin>>n>>m;
for(int i=0;i<=16;i++){
for(int j=1;j<=2*n;j++){
v[i][j]=inf;
}
}
for(int i=1;i<=nmax;i++){
log[i]=log[i-1];
if(i==(1<<(log[i]+1))){
log[i]++;
}
}
for(int i=1;i<=n;i++){
fin>>v[0][i];
}
int n2=2*n-(n&(n-1));
for(int i=1;(1<<(i-1))<=n;i++){
for(int j=1;j<=n2-(1<<i)+2;j++){
v[i][j]=Min(v[i-1][j],v[i-1][j+i]);
}
}
//test(n);
for(int i=1;i<=m;i++){
int x,y;
fin>>x>>y;
int log2=log[y-x+1];
fout<<Min(v[log2][x],v[log2][1+y-(1<<log2)])<<"\n";
}
return 0;
}