#include <iostream> #include <algorithm> #include <vector> #define MAXN 500010 using namespace std; int n,a[MAXN]; pair<int,int> s[4*MAXN]; int lz[4*MAXN]; void init(int i, int l, int r) { if (l == r) { s[i] = make_pair(0, -l); return; } int mid = (l + r) / 2; init(2*i,l,mid); init(2*i+1,mid+1,r); s[i] = max(s[2*i], s[2*i+1]); } void push(int i, int l, int r) { s[i].first += lz[i]; if (l != r) { lz[2*i] += lz[i]; lz[2*i+1] += lz[i]; } lz[i] = 0; } void add(int i, int l, int r, int ll, int rr, int val) { push(i,l,r); if (r < ll || l > rr) return; if (l >= ll && r <= rr) { lz[i] += val; push(i,l,r); return; } int mid = (l + r) / 2; add(2*i,l,mid,ll,rr,val); add(2*i+1,mid+1,r,ll,rr,val); s[i] = max(s[2*i],s[2*i+1]); } pair<int,int> query(int i, int l, int r, int ll, int rr) { push(i,l,r); if (r < ll || l > rr) return make_pair(-MAXN, -MAXN); if (l >= ll && r <= rr) return s[i]; int mid = (l + r) / 2; return max(query(2*i,l,mid,ll,rr),query(2*i+1,mid+1,r,ll,rr)); } int mx[MAXN],mn[MAXN]; vector<pair<int,int> > stk; vector<pair<int,int> > v; int main() { ios::sync_with_stdio(0); cin >> n; for (int i = 1; i <= n; i++) { cin >> a[i]; stk.push_back(make_pair(a[i],i)); } sort(stk.begin(),stk.end()); reverse(stk.begin(),stk.end()); bool sorted = 1; for (int i = 1; i <= n; i++) if (a[i] != i) sorted = 0; if (sorted) { cout << "Cool Array\n"; return 0; } mx[1] = a[1]; for (int i = 2; i <= n; i++) mx[i] = max(a[i], mx[i-1]); mn[n] = a[n]; for (int i = n-1; i > 0; i--) mn[i] = min(a[i], mn[i+1]); init(1,1,n); pair<int,pair<int,int> > ans = make_pair(0,make_pair(0,0)); for (int i = 1; i <= n; i++) { if (a[i] == mx[i]) { v.push_back(make_pair(a[i],i)); add(1,1,n,i,i,1); } else if (a[i] == mn[i]) { while (stk.back().first < a[i]) { int x = stk.back().second; stk.pop_back(); if (x < i && a[x] != mn[x]) { add(1,1,n,1,x,-1); } } pair<int,int> q = query(1,1,n,1,i); ans = max(ans, make_pair(q.first, make_pair(q.second, -i))); } else if (a[i] >= stk.back().first) { int x = upper_bound(v.begin(),v.end(),make_pair(a[i],0)) -> second; add(1,1,n,x,i,1); } //for (int i = 1; i <= n; i++) cerr << query(1,1,n,i,i).first << ' '; //cerr << endl; } cout << -ans.second.first << ' ' << -ans.second.second << '\n'; }