Pagini recente » Cod sursa (job #3210991) | Cod sursa (job #814127) | Cod sursa (job #675512) | Cod sursa (job #1691506) | Cod sursa (job #2792463)
#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 + 2 * d - 1 <= 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;
}