Pagini recente » Cod sursa (job #1694429) | Cod sursa (job #258122) | Cod sursa (job #122092) | Cod sursa (job #247279) | Cod sursa (job #3330549)
#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;
vector<int> values;
ll n;
ll m;
int query(ll, ll);
int main() {
fi >> n >> m;
lg2.resize(n + 1);
for(ll i = 2, x; 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;
cout << query(x, y) << '\n';
}
return 0;
}
int query(const ll x, const ll y) {
const ll len = y - x + 1;
const ll k = log2(len);
const ll a = min(rmq[k][y], rmq[k][y - (1 << k) + 1]);
if(a > 1)
return (a - 1);
return a;
}