Pagini recente » Cod sursa (job #308090) | Cod sursa (job #781491) | Cod sursa (job #973749) | Cod sursa (job #1584482) | Cod sursa (job #831448)
Cod sursa(job #831448)
#include <cstdio>
const int MAX_SIZE(100000);
int n, m;
int rmq [17] [MAX_SIZE];
int log [MAX_SIZE];
inline int min (int a, int b)
{
if (a < b)
return a;
return b;
}
inline void build (void)
{
for (int index(2) ; index <= n ; ++index)
log[index] = log[index >> 1] + 1;
int i, j;
for (i = 1 ; i <= log[n] ; ++i)
for (j = 1 ; j <= n ; ++j)
rmq[i][j] = min(rmq[i - 1][j],rmq[i - 1][j + (1 << (i - 1))]);
}
inline int query (int left, int right)
{
int cardinal(right - left + 1);
return min(rmq[log[cardinal]][left],rmq[log[cardinal]][right - (1 << log[cardinal]) + 1]);
}
int main (void)
{
std::freopen("rmq.in","r",stdin);
std::freopen("rmq.out","w",stdout);
std::scanf("%d %d",&n,&m);
for (int index(1) ; index <= n ; ++index)
std::scanf("%d",&rmq[0][index]);
build();
for (int counter(0), left, right ; counter < m ; ++counter)
{
std::scanf("%d %d",&left,&right);
std::printf("%d\n",query(left,right));
}
std::fclose(stdin);
std::fclose(stdout);
return 0;
}