Pagini recente » Cod sursa (job #2331932) | Cod sursa (job #1089019) | Cod sursa (job #1072285) | Cod sursa (job #545851) | Cod sursa (job #3126054)
#include <bits/stdc++.h>
using namespace std;
ifstream in ("rmq.in");
ofstream out ("rmq.out");
const int NMAX = 1e5;
const int p2[] = {1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072};
int rmq[17][NMAX + 5];
int lg[NMAX + 5];
inline int query (int x, int y)
{
int k = lg[y-x+1];
return min(rmq[k][x], rmq[k][y-p2[k]+1]);
}
int main()
{
int n, q;
in >> n >> q;
for (int i=2; i<=n; i++)
lg[i] = lg[(i >> 1)] + 1;
for (int i=1; i<=n; i++)
in >> rmq[0][i];
for (int j=1; p2[j] <= n; j++)
{
for (int i=1; i+p2[j]-1<=n; i++)
{
rmq[j][i] = min(rmq[j-1][i], rmq[j-1][i+p2[j-1]]);
}
}
while (q--)
{
int x, y;
in >> x >> y;
out << query(x, y) << '\n';
}
return 0;
}