Pagini recente » Cod sursa (job #2587688) | Cod sursa (job #2788329) | Cod sursa (job #1035480) | Cod sursa (job #2749422) | Cod sursa (job #2787624)
#include <iostream>
#include <fstream>
using namespace std;
int n, q, rmq[100005][25], p = 1, lg, ex, pw[100005], x, y, j;
int putere(int a, int b)
{
if (b == 0) return 1;
if (b % 2 == 0)
return putere(a, b / 2) * putere(a, b / 2);
else if (b % 2 == 1) return putere(a, b / 2) * putere(a, b / 2) * a;
}
int main()
{
ifstream cin("rmq.in");
ofstream cout("rmq.out");
cin >> n >> q;
for (int i = 1;i <= n;i++) {
cin >> x;
rmq[i][0] = x;
if (p * 2 <= i)
{
ex++;
p = p * 2;
}
pw[i] = ex;
}
for (lg = 2, j = 1;lg <= n;lg *= 2, j++)
for (int i = 1;i + lg-1 <= n;i++)
rmq[i][j] = min(rmq[i][j - 1], rmq[i + lg / 2][j - 1]);
while (q) {
cin >> x >> y;
cout << min(rmq[x][pw[y - x + 1]], rmq[y - (1 << pw[y - x + 1]) + 1][pw[y - x + 1]]) << endl;
q--;
}
}