Pagini recente » Cod sursa (job #2555724) | Cod sursa (job #908391) | Cod sursa (job #591234) | Cod sursa (job #229133) | Cod sursa (job #2566096)
#include <fstream>
#include <iostream>
#include <stack>
using namespace std;
const int N = 100005;
int a[N], n, rmq[17][N], exp[20];
void Build_RMQ ()
{
int i, j;
for (i = 1; i <= n; i++)
rmq[0][i] = a[i];
for (i = 2; i <= N; i++)
exp[i] = exp[i / 2] + 1;
for (i = 1; i <= exp[n]; i++)
for (j = 1; j <= n - (1 << i) + 1; j++)
rmq[i][j] = min(rmq[i - 1][j], rmq[i - 1][j + (1 << (i - 1))]);
}
int Query (int a, int b)
{
if (a > b) swap(a, b);
int k = exp[b - a + 1];
return min (rmq[k][a], rmq[k][b - (1 << k) + 1]);
}
void Read ()
{
ifstream fin ("rmq.in");
ofstream fout ("rmq.out");
int q;
fin >> n >> q;
for (int i = 1; i <= n; i++)
fin >> a[i];
Build_RMQ();
while (q--)
{
int x, y;
fin >> x >> y;
fout << Query(x, y) << "\n";
}
fout.close();
fin.close();
}
int main()
{
Read();
return 0;
}