Pagini recente » Cod sursa (job #2658776) | Cod sursa (job #3041108) | Cod sursa (job #145567) | Cod sursa (job #3276986) | Cod sursa (job #795287)
Cod sursa(job #795287)
#include <stdio.h>
#define NMAX 100005
#define LMAX 18
int n,m,A[NMAX],lg[NMAX];
int rmq[LMAX][NMAX];
void read()
{
scanf("%d%d",&n,&m);
int i;
for (i=1; i<=n; i++)
scanf("%d",&A[i]);
}
inline int min(int x,int y)
{
return x<y ? x : y;
}
void precompute()
{
int i,j,val1,val2;
for (i=1; i<=n; i++)
{
rmq[0][i]=A[i];
lg[i]= (i>=2) ? lg[i/2]+1 : 0;
}
for (j=1; (1<<j)<=n; j++)
{
val1=1<<(j-1); val2=1<<j;
for (i=1; i<=n-val2+1; i++)
rmq[j][i]=min(rmq[j-1][i],rmq[j-1][i+val1]);
}
}
void solve()
{
int i,x,y,l;
for (i=1; i<=m; i++)
{
scanf("%d%d",&x,&y);
l=lg[y-x+1];
printf("%d\n",min(rmq[l][x],rmq[l][y-(1<<l)+1]));
}
}
int main()
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
read();
precompute();
solve();
return 0;
}