Pagini recente » Cod sursa (job #3266750) | Cod sursa (job #286847) | Cod sursa (job #2463767) | Cod sursa (job #1773638) | Cod sursa (job #1961263)
#include <fstream>
#include <cmath>
#include <iostream>
#define MAXN 100002
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int val, nr, n, m, st, dr;
int a[25][MAXN];
inline void Read()
{
fin >> n >> m;
for (int i = 1; i <= n; i++)
{
fin >> nr;
a[0][i] = nr;
}
}
inline void rmq_constructie_matrice()
{
int nn = log2(n);
for (int i = 1; i <= nn; i++)
{
val = 1 << (i - 1);
for (int j = 1; j <= n; j++)
{
a[i][j] = min(a[i - 1][j], a[i - 1][j + val]);
}
}
}
inline void rmq_interogare()
{
for (int i = 1; i <= m; i++)
{
fin >> st >> dr;
if (st == dr) {
fout << a[0][st] << "\n";
continue;
}
nr = 1; val = 0;
while (nr <= dr - st)
{
nr *= 2;
val++;
}
val--; nr /= 2;
fout << min(a[val][st], a[val][dr - nr + 1]) << "\n";
}
}
int main ()
{
Read();
rmq_constructie_matrice();
rmq_interogare();
fin.close(); fout.close(); return 0;
}