Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <algorithm>
- #include <math.h>
- #include <vector>
- #include <utility>
- using namespace std;
- pair <int, int> find(int v, int L, int R, int l, int r, vector <pair <int, int>> a) {
- if (l >= L and r <= R)
- return a[v];
- if (l > R || r < L)
- return pair<int, int> (-1, v);
- pair <int, int> m1 = find(2 * v + 1, L, R, l, (l + r) / 2, a);
- pair <int, int> m2 = find(2 * v + 2, L, R, (l + r) / 2 + 1, r, a);
- if (m1.first > m2.first)
- return m1;
- return m2;
- }
- int main() {
- int n;
- cin >> n;
- int N = (int)pow(2, ceil(log2(n)));
- vector <pair <int, int>> a(2 * N - 1, pair <int, int> (-1, 0));
- for (int i = a.size() / 2; i < a.size() / 2 + n; i++) {
- pair <int, int> p(0, i - a.size() / 2);
- cin >> p.first;
- a[i] = p;
- }
- for (int i = a.size() / 2 - 1; i >= 0; i--) {
- if (a[i * 2 + 1].first > a[i * 2 + 2].first)
- a[i] = a[i * 2 + 1];
- else
- a[i] = a[i * 2 + 2];
- }
- int k, L, R;
- cin >> k;
- for (int i = 0; i < k; i++) {
- cin >> L >> R;
- L--; R--;
- pair <int, int> ans(find(0, L, R, 0, a.size() / 2, a));
- cout << ans.first << " " << ans.second + 1 << endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement