Pagini recente » Cod sursa (job #2513152) | Cod sursa (job #1563453) | Cod sursa (job #2498863) | Cod sursa (job #1156804) | Cod sursa (job #1069778)
#include <stdio.h>
#include <math.h>
#include<algorithm>
using namespace std;
const int nmax = 103000;
int n,m,a[nmax],p[nmax][100];
void create(){
for(int i =0 ;i<n;i++)p[i][0]=i;
/*
for(int i = 1 ;1<<i <= n;i++)
for(int j = 0 ;j+(1<<i)-1 < n;j++)
if(a[p[j][i-1]]<a[p[j+(1<<(i-1))][i-1]])p[j][i]=p[j][i-1];
else p[j][i]=p[j+(1<<(i-1))][i-1];
*/
for (int j = 1; 1 << j <= n; j++)
for (int i = 0; i + (1 << j) - 1 < n; i++)
if (a[p[i][j - 1]] < a[p[i + (1 << (j - 1))][j - 1]])
p[i][j] = p[i][j - 1];
else
p[i][j] = p[i + (1 << (j - 1))][j - 1];
}
int minim(int x,int y){
x-=1;y-=1;
int k;// = trunc(log);//log(y-x+1)
for(k=1; 1<<k<=y-x+1;k++);k--;//return k;
return min(a[p[x][k]],a[p[y-(1<<k)+1][k]]);
}
int main(){
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
scanf("%ld%ld",&n,&m);
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
}
create();
/* for(int j=0;j<=n;j++)
{
for(int i=0;1<<i<n;i++)printf("%d ",p[j][i]);
printf("\n");
}*/
// printf("%d\n",minim(1,2));
int x,y;
for(int i=1;i<=m;i++){
scanf("%d %d",&x,&y);
printf("%d\n",minim(x,y));
}
fclose(stdout); fclose(stdin);
return 0;
}