Pagini recente » Cod sursa (job #2284582) | Cod sursa (job #522805) | Cod sursa (job #2734930) | Cod sursa (job #212875) | Cod sursa (job #2628397)
#include <iostream>
#include <fstream>
#define M 100010
#define N 25
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int n, m;
int low[M];
int temp;
int length;
pair <int, int>query;
int ans[N][M], point[M];
int minim(int a, int b)
{
if (a < b)
return a;
return b;
}
int main()
{
f >> n >> m;
for (int i = 1; i <= n; ++i)
{
f >> low[i];
ans[0][i] = low[i];
}
point[1] = 0;
for (int i = 2; i <= n; ++i)
{
point[i] = point[i / 2] + 1;
}
for (int i = 1; (1 << i) <= n; ++i)
{
for (int j = 1; j <= n - (1 << i) + 1; ++j)
{
ans[i][j] = minim(ans[i - 1][j], ans[i - 1][j + (1 << (i - 1))]);
}
}
for (int i = 1; i <= m; ++i)
{
f >> query.first >> query.second;
temp = query.second - query.first + 1;
g << minim(ans[point[temp]][query.first], ans[point[temp]][query.second - (1 << point[temp]) + 1]) << "\n";
}
f.close();
g.close();
return 0;
}