Pagini recente » Cod sursa (job #3158972) | Cod sursa (job #1585328) | Cod sursa (job #1781045) | Cod sursa (job #1279719) | Cod sursa (job #2749914)
#include <iostream>
#include <vector>
#include <cmath>
#include <fstream>
using namespace std;
string __fname = "rmq";
ifstream in (__fname + ".in");
ofstream out (__fname + ".out");
#define cin in
#define cout out
template <class T> class rmq {
private:
vector <vector <T> > dp;
vector <T> a;
public:
rmq(vector <T> in) {
int n = in.size();
a = in;
vector <vector <T> > __dp(n, vector <T> (log2(n) + 1));
dp = __dp;
for (int i = 0; i < n; i++) {
dp[i][0] = a[i];
}
for (int j = 1; j <= log2(n); j++) {
for (int i = 0; i + (1 << j) <= n; i++) {
dp[i][j] = min(dp[i][j-1], dp[i + (1 << (j - 1))][j-1]);
}
}
}
T get_min(int l, int r) {
int pw = log2(r - l + 1);
T rs = min(dp[l][pw], dp[r - (1 << pw) + 1][pw]);
return rs;
}
};
void solve(int id){
return;
}
int main(){
// ios_base::sync_with_stdio(0);cin.tie(0);
int n,q;
cin >> n >> q;
vector <int> a (n);
for (int i = 0; i < n; i++){
cin >> a[i];
}
rmq <int> rq (a);
while (q--) {
int l,r;
cin >> l >> r;
cout << rq.get_min(l - 1, r -1) << "\n";
}
return 0;
}