Pagini recente » Cod sursa (job #2418437) | Cod sursa (job #701113) | Cod sursa (job #1091833) | Cod sursa (job #2602862) | Cod sursa (job #2874862)
#include <bits/stdc++.h>
using namespace std;
ifstream in ("rmq.in");
ofstream out ("rmq.out");
int lp[100001][20];
int a[100001];
void preprocces (int n)
{
for (int i=1; i<=n; i++)
lp[i][0] = i;
for (int j=1; (1<<j) <= n; j++)
{
for (int i=1; (i+(1<<j) -1) <= n; i++)
{
if (a[lp[i][j-1]] < a[lp[i+(1<<(j-1))][j-1]])
lp[i][j] = lp[i][j-1];
else
lp[i][j] = lp[i+(1<<(j-1))][j-1];
}
}
}
int query (int l, int r)
{
int j = int(log2(r-l+1));
return min(a[lp[l][j]], a[lp [r-(1<<j)+1][j]] );
}
int main()
{
int n;
in >> n;
int q;
in >> q;
for (int i=1; i<=n; i++)
in >> a[i];
preprocces(n);
while (q--)
{
int l, r;
in >> l >> r;
out << query(l, r) << '\n';
}
return 0;
}