Pagini recente » Cod sursa (job #1242031) | Cod sursa (job #2008421) | Cod sursa (job #1526849) | Cod sursa (job #1808671) | Cod sursa (job #448072)
Cod sursa(job #448072)
#include <cstdio>
#include <algorithm>
using namespace std;
const int NMAX = 100010;
const int LMAX = 18;
int N, M;
int A[NMAX];
int R[LMAX][NMAX];
int lg[NMAX];
void log()
{
lg[1] = 0;
for(int i = 2 ; i <= N ; i++)
lg[i] = lg[i/2] + 1;
}
void rmq()
{
for(int j = 1 ; j <= N ; j++)
R[0][j] = A[j];
for(int i = 1 ; (1<<i) <= N ; i++)
for(int j = 1 ; j + (1<<i) - 1 <= N ; j++)
R[i][j] = min(R[i - 1][j], R[i - 1][j +(1<<(i - 1))]);
}
void citire()
{
scanf("%d%d", &N, &M);
for(int i = 1 ; i <= N ; i++)
scanf("%d",&A[i]);
log();
rmq();
for(int i = 1 ; i <= M ; i++)
{
int x, y;
scanf("%d%d", &x, &y);
int k = lg[y - x + 1];
printf("%d\n", min(R[k][x], R[k][y - (1<<k) + 1]));
}
}
int main()
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
citire();
return 0;
}