Pagini recente » Cod sursa (job #3001680) | Cod sursa (job #428029) | Cod sursa (job #1274986) | Cod sursa (job #1213273) | Cod sursa (job #1657880)
#include<cstdio>
int log[100001],put[20];
int ma[20][100001];
int min(int a, int b)
{if(a<=b)
return a;
return b;
}
int main ()
{freopen ("rmq.in","r",stdin);
freopen ("rmq.out","w",stdout);
int n,i,j,m,x,y,k,q;
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
scanf("%d",&ma[1][i]);
k=1;
q=0;
for(i=1;i<=k&&i<=100000;i++)
{log[i]=q;
if(i==k)
{put[q]=k;
k*=2;
q++;
}
}
log[1]=1;
k=1;
for(i=2;i<=log[n];i++)
{for(j=1;j<=n-2*k+1;j++)
ma[i][j]=min(ma[i-1][j],ma[i-1][j+k]);
k*=2;
}
for(i=1;i<=m;i++)
{scanf("%d%d",&x,&y);
if(x>y)
{k=x;
x=y;
y=k;
}
k=log[y-x+1];
printf("%d\n",min(ma[k][x],ma[k][y-put[k-1]+1]));
}
return 0;
}