Pagini recente » Cod sursa (job #1623054) | Cod sursa (job #1201604) | Cod sursa (job #1547370) | Cod sursa (job #2767113) | Cod sursa (job #2792446)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("rmq.in"); ofstream fout("rmq.out");
const int NMAX = 1e5 + 3;
int n, q;
int lg[NMAX], rmq[20][NMAX];
void build_lg()
{
lg[1] = 0;
for(int i = 2; i <= NMAX; i++)
lg[i] = lg[i / 2] + 1;
}
int mymin(int a, int b)
{
return (a < b ? a : b);
}
void build_rmq()
{
int d;
for(int l = 1; l <= lg[n]; l++)
{
d = (1 << (l - 1));
for(int i = 1; i + d <= n; i++)
rmq[l][i] = mymin(rmq[l - 1][i], rmq[l - 1][i + d]);
}
}
int query(int x, int y)
{
int sz = (y - x + 1);
int L = lg[sz];
return mymin(rmq[L][x], rmq[L][y - (1 << L) + 1]);
}
int main()
{
fin >> n >> q;
for(int i = 1; i <= n; i++)
fin >> rmq[0][i];
build_lg();
build_rmq();
int a, b;
for(int i = 1; i <= q; i ++)
fin >> a >> b, fout << query(a, b) << '\n';
return 0;
}