Pagini recente » Istoria paginii utilizator/dogy007 | Cod sursa (job #1957945) | Cod sursa (job #2290084) | Cod sursa (job #1047524) | Cod sursa (job #2902431)
#include <bits/stdc++.h>
#define int long long
using namespace std;
ifstream f ("rmq.in");
ofstream g ("rmq.out");
const int maxn = 1e5 + 5;
int suma[maxn], l[32];
int rmq[32][maxn];
int main()
{
int n, q;
f>>n>>q;
for(int i = 1; i <= n; ++i)
{
f >> rmq[0][i];
}
l[0] = l[1] = 0;
for(int i = 2; i <= n; ++i)
l[i] = l[i/2] + 1;
for(int step = 1; step <= l[n]; ++step)
for(int i = 1; i <= n - (1 << step) + 1; ++i)
rmq[step][i] = min(rmq[step-1][i],
rmq[step-1][i+(1<<(step-1))]);
for(int i = 1; i <= q; ++i) {
int x, y; f >> x >> y;
int l = l[y-x+1];
g << min(rmq[l][x], rmq[l][y - (1 << l) + 1]) <<'\n';
}
return 0;
}