Pagini recente » Cod sursa (job #2791533) | Cod sursa (job #2950801) | Cod sursa (job #2337213) | Clasament preoni6a | Cod sursa (job #2792537)
/* [A][M][C][B][N] / [K][R][I][P][6][8] */
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const char sp = ' ', nl = '\n';
const int MOD = 9001;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
template<typename Cmp>
class RMQ {
private:
vector<vector<int>> lookup;
vector<int> vec;
Cmp cmp;
public:
RMQ(vector<int>& v) : vec(v) {
int size = vec.size(), lg = log2(vec.size());
lookup = vector<vector<int>>(size, vector<int>(lg + 1));
for (int i = 0; i < size; ++i)
lookup[i][0] = i;
for (int p = 1; p <= lg; ++p) {
for (int i = 0; i + (1 << p) <= size; ++i) {
int curr = lookup[i][p - 1];
int next = lookup[i + (1 << (p - 1))][p - 1];
lookup[i][p] = cmp(vec[curr], vec[next]) ? curr : next;
}
}
}
int querry(int st, int dr) {
int p = int(log2(dr - st + 1));
int curr = lookup[st][p];
int next = lookup[dr - (1 << p) + 1][p];
return cmp(vec[curr], vec[next]) ? curr : next;
}
};
class Cmp {
public:
bool operator()(const int& a, const int& b) {
return a <= b;
}
};
int main() {
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
int n, q;
fin >> n >> q;
vector<int> v(n);
for (int& e : v) fin >> e;
RMQ<Cmp> rmq(v);
while (q--) {
int st, dr;
fin >> st >> dr;
fout << v[rmq.querry(st - 1, dr - 1)] << nl;
}
}