Pagini recente » Cod sursa (job #1214649) | Cod sursa (job #2026179) | Monitorul de evaluare | Cod sursa (job #2753254) | Cod sursa (job #1922851)
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
const int NMax = 100005;
int N, M;
int rmq[NMax][20];
void RMQ()
{
int jmax = int(log2(N))+1;
for(int j=1; j < jmax; ++j)
for(int i=0; i<N; ++i)
{
if(i+(1<<(j-1)) < N )
rmq[i][j]=min(rmq[i][j-1], rmq[i+(1<<(j-1))][j-1]);
else
rmq[i][j]=rmq[i][j-1];
}
}
void Read()
{
scanf("%d %d", &N, &M);
for(int i=1; i<=N; ++i)
scanf("%d", &rmq[i-1][0]);
RMQ();
for(int i=1; i<=M; ++i)
{
int x,y;
scanf("%d %d", &x, &y);
--x;
--y;
int j=int(log2(y-x+1));
printf("%d\n", min(rmq[x][j], rmq[y-(1<<j)+1][j]));
}
}
int main()
{
freopen("rmq.in", "r", stdin);
freopen("rmq.out", "w", stdout);
Read();
return 0;
}