Pagini recente » Cod sursa (job #316577) | Cod sursa (job #3232695) | Cod sursa (job #48055) | Cod sursa (job #2779496) | Cod sursa (job #2817901)
#include <bits/stdc++.h>
using namespace std;
const int NMAX = 1e5,LOG = 25,INF = 1e9;
int v[NMAX + 5],rmq[NMAX + 5][LOG + 5],lg[LOG + 5];
int main()
{
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int n,m,p = 0,a,b,c;
fin >> n >> m;
for (int i = 1;i <= n;i++) {
fin >> v[i];
rmq[i][0] = v[i];
lg[i] = p;
if (i == (1 << (p + 1)))
p++;
}
for (int i = 1;i <= n;i++)
for (int j = 1;j < LOG;j++)
rmq[i][j] = INF;
for (int j = 1;j < LOG;j++)
for (int i = 1;i + (1 << (j - 1)) <= n;i++)
rmq[i][j] = min(rmq[i][j - 1], rmq[i + (1 << (j - 1))][j - 1]);
for (int i = 0;i < m;i++) {
fin >> a >> b;
c = lg[b - a + 1];
fout << min(rmq[a][c], rmq[b - (1 << c) + 1][c]) << '\n';
}
return 0;
}