Pagini recente » Cod sursa (job #1029724) | Cod sursa (job #2819960) | Cod sursa (job #537919) | Cod sursa (job #619195) | Cod sursa (job #2284826)
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");
int main()
{
int n, T;
in >> n >> T;
vector<int> v(n + 1);
vector<int> logaritm(n + 1);
for (int i = 2; i <= n; i++)
logaritm[i] = logaritm[i / 2] + 1;
vector<vector<int> > rmq(logaritm[n] + 1, vector<int>(n + 1));
for (int i = 1; i <= n; i++)
in >> v[i], rmq[0][i] = v[i];
for (int i = 1; (1<<i) <= n; i++)
for (int j = 1; j <= n; j++)
rmq[i][j] = min(rmq[i - 1][j], rmq[i - 1][j + (1<<i-1)]);
while (T--)
{
int x, y;
in >> x >> y;
int dif = logaritm[y - x + 1];
out << min(rmq[dif][x], rmq[dif][y - (1<<dif) + 1]) << '\n';
}
return 0;
}