Pagini recente » Cod sursa (job #2881047) | Cod sursa (job #458882) | Cod sursa (job #691688) | Cod sursa (job #2728650) | Cod sursa (job #2914191)
#include <vector>
#include <fstream>
#include <cmath>
using namespace std;
const int rmqMax = log2(100100);
ifstream cin ("rmq.in");
ofstream cout ("rmq.out");
int rmq[100100][30];
int a[100100];
int n;
void initRmq ()
{
for (int i = 1; i <= n; i++)
{
rmq[i][0] = a[i];
}
for (int i = 1; i < 30; i++)
{
for (int k = 1; k <= n; k++)
{
if (k + (1 << (i - 1)) <= n)
{
rmq[k][i] = min(rmq[k][i-1], rmq[k + (1 << (i - 1))][i-1]);
}
}
}
}
int queryRmq (int s, int d)
{
int i = log2(d - s + 1);
int ans = min(rmq[s][i], rmq[d - (1 << i) + 1][i]);
return ans;
}
int main() {
int q;
cin >> n >> q;
for (int i = 1; i <= n; i++)
{
cin >> a[i];
}
initRmq();
while (q--)
{
int s, d;
cin >> s >> d;
cout << queryRmq(s, d) << '\n';
}
return 0;
}