Pagini recente » Cod sursa (job #2189195) | Cod sursa (job #1580242) | Cod sursa (job #3166362) | Cod sursa (job #1958557) | Cod sursa (job #2884180)
#include <fstream>
#define NMAX 100004
using namespace std;
ifstream fin ("rmq.in");
ofstream fout ("rmq.out");
int n, m, L, R;
int v[NMAX], logg[NMAX], RMQ[20][NMAX];
void logaritm();
void dinamica();
int main()
{
fin >> n >> m;
for (int i = 1; i <= n; i++)
fin >> v[i];
logaritm();
dinamica();
for (int i = 1; i <= m; i++)
{
fin >> L >> R;
int lg = logg[R-L+1];
fout << min(RMQ[lg][L], RMQ[lg][R-(1<<lg)+1]) << '\n';
}
return 0;
}
void dinamica()
{
for (int i = 1; i <= n; i++)
RMQ[0][i] = v[i];
for (int i = 1; (1 << i) <= n; i++)
for (int j = 1; j + (1 << i) - 1 <= n; j++)
RMQ[i][j] = min(RMQ[i-1][j], RMQ[i-1][j+(1 << (i-1))]);
}
void logaritm()
{
logg[1] = 0;
for (int i = 2; i <= n; i++)
logg[i] = logg[i/2] + 1;
}