Pagini recente » Cod sursa (job #3267974) | Cod sursa (job #3197064) | Cod sursa (job #1627902) | Cod sursa (job #890673) | Cod sursa (job #795380)
Cod sursa(job #795380)
#include <stdio.h>
#define NMAX 100002
#define LMAX 18
long int l[NMAX],rmq[LMAX][NMAX];
long int n,m;
inline long int min ( long int a ,long int b)
{
return a<b ? a:b;
}
int main()
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
long int x,y,intlength,add,line;
scanf("%ld %ld",&n,&m);
for (int i=1;i<=n;++i) scanf("%ld",&rmq[0][i]);
l[1]=0;
for(int i=2;i<=n;++i)
l[i] = l[ i/2 ]+1;
int long lm1pow2;
for(int i=1; ( 1 << i ) <= n; ++i)
{
lm1pow2 = ( 1 << ( i-1 ) );
for(int j=1; j <= n - ( 1 << i) +1 ; ++j )
rmq[ i ][ j ]= min( rmq [ i-1 ][ j ],rmq[ i-1 ][ j + lm1pow2 ]);
}
for (int i=1;i<=m;++i)
{
scanf("%ld %ld",&x,&y);
intlength=y-x+1;
line = l [ intlength ];
add = intlength - ( 1 << line );
printf("%ld\n" , min ( rmq [ line ][ x ] , rmq [ line ][ x + add ] ) );
}
return 0;
}