Pagini recente » Cod sursa (job #1349855) | Cod sursa (job #3269755) | Cod sursa (job #1161076) | Cod sursa (job #827788) | Cod sursa (job #1069795)
#include <stdio.h>
#include <math.h>
#include<algorithm>
using namespace std;
const int nmax = 103000;
int n,m,a[nmax],p[20][nmax];
void create(){
for(int i =0 ;i<n;i++)p[0][i]=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[j - 1][i]] < a[p[j - 1][i + (1 << (j - 1))]])
p[j][i] = p[j - 1][i];
else
p[j][i] = p[j - 1][i + (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[k][x]],a[p[k][y-(1<<k)+1]]);
}
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;
}