Pagini recente » Cod sursa (job #1173409) | Cod sursa (job #3032203) | Cod sursa (job #3280916) | Cod sursa (job #2442595) | Cod sursa (job #2827488)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");
const int N = 1e5;
const int LOG_N = 18;
int n, q;
int rmq[N + 5][LOG_N], log[N + 5];
void precompute()
{
for(int i = 2; i <= n; i++)
log[i] = log[i / 2] + 1;
for(int j = 1; (1 << j) <= n; 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]);
}
int query(int l, int r)
{
int dist = r - l + 1;
return min(rmq[l][log[dist]], rmq[r - (1 << log[dist]) + 1][log[dist]]);
}
int main()
{
//ios_base::sync_with_stdio(false);
//cin.tie(NULL);
in >> n >> q;;
for(int i = 1; i <= n; i++)
in >> rmq[i][0];
precompute();
while(q--)
{
int x, y;
in >> x >> y;
out << query(x, y) << '\n';
}
return 0;
}