Pagini recente » Cod sursa (job #1658070) | Cod sursa (job #2423322) | Cod sursa (job #1536269) | Cod sursa (job #938972) | Cod sursa (job #1048405)
/*
~Keep It Simple!~
*/
#include <stdio.h>
long int A[100001],M[100001][18],n,m,log[100001];
int main()
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
scanf("%ld%ld",&n,&m);
for(int i=0;i<n;i+=1)
scanf("%ld",&A[i]);
for( int i = 2; i <= n; i++ )
log[ i ] = log [ i/2 ] + 1;
for(int i=0; i < n; i++)
M[i][0] = i;
for(int j = 1; 1<<j <= n; j++ )
for(int i = 0; i + (1<<j) - 1 < n; i++)
{
if ( A[M[i][j-1]] < A[M[i + (1 << (j-1))][j-1]] )
M[i][j] = M[i][j-1];
else
M[i][j] = M[i + (1 << (j-1))][j-1];
}
long int x,y;
for(int i=1; i <= m; i++ )
{
scanf("%ld %ld",&x,&y);
x -= 1;
y -= 1;
int k = log[y-x+1];
if( A[M[x][k]] <= A[M[y - ( 1 << k )+1][k]])
printf("%ld\n",A[M[x][k]]);
else
printf("%ld\n",A[M[y - ( 1 << k )+1][k]]);
}
}