Pagini recente » Cod sursa (job #348352) | Cod sursa (job #2298012) | Cod sursa (job #2803964) | Cod sursa (job #1035256) | Cod sursa (job #387026)
Cod sursa(job #387026)
#include<stdio.h>
#define minim(a, b) (a<b ? a : b)
int n,m,v[100004];
int a[20][100004];
int p[100004];
int main ()
{
int i,j,st,dr,k;
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
scanf("%d",&v[i]);
for (i=1;i<=n;i++)
a[0][i]=v[i];
for (k=1;(1<<k)<=n;k++)
for(i=1;i<=n-(1<<k)+1;i++)
a[k][i]=minim(a[k-1][i],a[k-1][i+(1<<(k-1))]);
for (i=1;i<=n;i++)
{
for (k=0;(1<<k)<=i;k++);
p[i]=k-1;
}
for(i=1;i<=m;i++)
{
scanf("%d%d",&st,&dr);
k=p[dr-st+1];
printf("%d\n",minim(a[k][st],a[k][dr-(1<<k)+1]));
}
return 0;
}