Pagini recente » Cod sursa (job #2292197) | Cod sursa (job #2316213) | Cod sursa (job #1073352) | Cod sursa (job #2033064) | Cod sursa (job #2357519)
#include <fstream>
#include <cmath>
#define N 100001
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int n, m, dp[N][20], a[N];
void pre()
{
for (int i = 0; i < n; i++)
dp[i][0] = i;
for (int j = 1; 1 << j <= n; j++)
for (int i = 0; i - 1 + (1 << j) < n; i++)
{
if (a[dp[i][j - 1]] < a[dp[i + 1 << (j - 1)][j - 1]])
dp[i][j] = dp[i][j - 1];
else
dp[i][j] = dp[i + (1 << (j - 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 = floor(log2(y - x));
if (a[dp[x][k]] < a[dp[y - (1 << k) + 1][k]])
g << a[dp[x][k]];
else g << a[dp[y - (1 << k) + 1][k]];
g << "\n";
}
return 0;
}