Pagini recente » Cod sursa (job #1690652) | Cod sursa (job #2160351) | Cod sursa (job #2968701) | Cod sursa (job #2613271) | Cod sursa (job #3330557)
#include <bits/stdc++.h>
using namespace std;
#define ll long long
// #define fi cin
// #define fo cout
string FILENAME = "rmq";
ifstream fi (FILENAME + ".in");
ofstream fo (FILENAME + ".out");
vector<vector<ll>> rmq;
vector<ll> lg2;
ll n;
ll m;
ll query(ll, ll);
int main() {
fi >> n >> m;
lg2.resize(n + 1);
for(ll i = 2; i <= n; ++i)
lg2[i] = lg2[i / 2] + 1;
rmq.assign(lg2[n] + 1, vector<ll>(n + 1));
for(ll i = 1, x; i <= n; ++i) {
fi >> x;
rmq[0][i] = x;
}
for(ll k = 1; (1 << k) <= n; ++k)
for(ll i = 1, j; i + (1 << k) - 1 <= n; ++i) {
j = i + (1 << (k - 1));
rmq[k][i] = min(rmq[k - 1][i], rmq[k - 1][j]);
}
for(ll i = 0, x, y; i < m; ++i) {
fi >> x >> y;
fo << query(x, y) << '\n';
}
return 0;
}
ll query(const ll x, const ll y) {
const ll len = y - x + 1;
const ll k = log2(len);
return min(rmq[k][x], rmq[k][y - (1 << k) + 1]);
}