Pagini recente » Cod sursa (job #1667862) | Cod sursa (job #61259) | Cod sursa (job #2595209) | Cod sursa (job #653422) | Cod sursa (job #3155121)
#include <fstream>
using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
#define MAX_N 100000
int v[MAX_N][17],max_put[MAX_N],n;
void const_sp(){
int aux1,put,i,j;
aux1=max_put[n];
put=1;
for(i=1;i<=aux1;i++){
for(j=0;j+put*2-1<n;j++){//printf("%d:%d %d:%d]",i,j,v[j][i-1],v[j+put][i-1]);
v[j][i]=min(v[j][i-1],v[j+put][i-1]);
}
put*=2;
}
}
int main()
{
int i,m,a,b,j,i1,len;
cin>>n>>m;
for(i=2;i<=MAX_N;i++){
max_put[i]=max_put[i/2]+1;
}
for(i=0;i<n;i++){
cin>>a;
v[i][0]=a;//printf("(%d)",v[i][0]);
}
/*for(i1=0;i1<n;i1++){
for(j=0;j<=max_put[n];j++)
printf("%d ",v[i1][j]);
printf("\n");
}
printf("\n\n");*/
const_sp();
for(i=1;i<=m;i++){
cin>>a>>b;
a--;b--;
len=b-a+1;
//printf("------------\n");
//printf("%d %d rez: %d\n",a,max_put[b-a+1],v[a][max_put[b-a+1]]);
// printf("%d %d rez: %d\n",b-(1<<max_put[b-a+1]),max_put[b-a+1],v[a][max_put[b-a+1]]);
cout<<min(v[a][max_put[len]],v[b-(1<<max_put[len])+1][max_put[len]])<<"\n";
}
return 0;
}