Pagini recente » Cod sursa (job #1201855) | Cod sursa (job #2080727) | Cod sursa (job #2254282) | Cod sursa (job #1590833) | Cod sursa (job #1518577)
#include <bits/stdc++.h>
using namespace std;
const int MAX_N = 100000 + 1;
const int MAX_LG = 17;
int rmq[MAX_LG][MAX_N];
int lg2[MAX_N];
int N, Q;
int main()
{
ifstream in("rmq.in");
ofstream out("rmq.out");
in >> N >> Q;
for (int i = 1; i <= N; ++i)
in >> rmq[0][i];
for (int i = 1; (1 << i) <= N; ++i)
for (int j = 1; j + (1 << i) - 1 <= N; ++j)
{
int p = 1 << (i - 1);
rmq[i][j] = min(rmq[i - 1][j], rmq[i - 1][j + p]);
}
for (int i = 2; i <= N; ++i)
lg2[i] = lg2[i >> 1] + 1;
while (Q--)
{
int x, y;
in >> x >> y;
int k = lg2[y - x + 1];
int p = 1 << k;
out << min(rmq[k][x], rmq[k][y - p + 1]) << "\n";
}
return 0;
}