Pagini recente » Cod sursa (job #2504758) | Cod sursa (job #1690884) | Cod sursa (job #1607715) | Cod sursa (job #290163) | Cod sursa (job #2357533)
#include <fstream>
#include <cmath>
#define N 100010
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int n, m, dp[20][N], a[N];
void pre()
{
for (int i = 0; i < n; i++)
dp[0][i] = i;
for (int j = 1; 1 << j <= n; j++)
for (int i = 0; i - 1 + (1 << j) < n; i++)
{
if (a[dp[j - 1][i]] < a[dp[j - 1][i + 1 << (j - 1)]])
dp[j][i] = dp[j - 1][i];
else
dp[j][i] = dp[j - 1][i + (1 << (j - 1))];
}
}
int main()
{
f >> n >> m;
for (int i = 0; i < n; i++)
f >> a[i];
pre();
int x, y, k;
while (m--)
{
f >> x >> y;
x--, y--;
k = log2(y - x + 1);
if (a[dp[k][x]] < a[dp[k][y - (1 << k) + 1]])
g << a[dp[k][x]];
else g << a[dp[k][y - (1 << k) + 1]];
g << "\n";
}
return 0;
}