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