Pagini recente » Cod sursa (job #1479384) | Cod sursa (job #419919) | Cod sursa (job #76697) | Cod sursa (job #1408271) | Cod sursa (job #478433)
Cod sursa(job #478433)
#include<stdio.h>
const int N=100001, M=21;
int n, m, min[N][M];
inline int Minim( int a, int b)
{
return (a<b ? a:b);
}
void Read()
{
scanf( "%d%d", &n, &m);
for( int i=1; i<=n; ++i)
scanf( "%d", &min[i][0]);
}
void Precalculation()
{
int PowMax=1;
while( (1<<PowMax)<n )
PowMax++;
for( int i=1; i<=PowMax; ++i)
for( int j=1; j<=n-PowMax; ++j)
min[j][i] = Minim( min[j][i-1], min[ j + (1<<(i-1)) ][i-1]);
}
inline int GetPow(int a)
{
int PowMax=1;
while( (1<<PowMax)<=a )
PowMax++;
return (PowMax-1);
}
void Respond()
{
int a, b, PowMax;
while(m--)
{
scanf( "%d%d", &a, &b);
PowMax=GetPow(a-b);
printf( "%d\n", Minim( min[a][PowMax], min[b-(1<<PowMax)+1][PowMax]));
}
}
int main()
{
freopen( "rmq.in", "r", stdin);
freopen( "rmq.out", "w", stdout);
Read();
Precalculation();
Respond();
return 0;
}