Pagini recente » Cod sursa (job #2118024) | Cod sursa (job #597075) | Cod sursa (job #2033512) | Cod sursa (job #2712712) | Cod sursa (job #385341)
Cod sursa(job #385341)
#include<stdio.h>
#define Nmax 100010
int v[Nmax],M[Nmax][20],i,n,x,y,m,j;
int rmq(int i, int j)
{
int k=0,val=j-i+1;
while(val!=1)
{
k++;
val>>=1;
}
if( M[i][k] < M[ j - (1<<k) +1 ] [k] )
return M[i][k];
return M[ j - (1<<k) +1 ] [k];
}
int main()
{
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++)
M[i][0]=v[i];
for(j=1; (1<<j) <=n ;j++)
for(i=1; i+(1<<j)-1 <= n; i++)
if( M[ i + (1<<(j-1)) ] [j-1] < M[i][j-1] )
M[i][j]=M[ i + (1<<(j-1)) ] [j-1];
else M[i][j]=M[i][j-1];
for(i=1;i<=m;i++)
{
scanf("%d %d",&x,&y);
printf("%d\n",rmq(x,y));
}
return 0;
}