#include <bits/stdc++.h> using namespace std; const int maxn= 500010 ; long long arr[maxn] , tree[4*maxn]; int n ; long long fans = maxn ; pair<int,int> p1 ; void build(int node ,int a, int b){ if(a==b){ tree[node] = 0 ; return ; } build(2*node , a, (a+b)/2) ; build(2*node + 1 ,(a+b)/2 + 1 ,b) ; tree[node] = 0 ; } int qst(int node , int a, int b ,int i , int j){ if(i>j) return 0; if(i > b or j < a or a > b){ return 0 ; } if(a >= i and b <= j){ return tree[node] ; } return (qst(2*node , a , (a+b)/2 , i , j) + qst(2*node + 1 , (a+b)/2 + 1 ,b , i , j )) ; } void upd(int node , int a, int b , int i){ if(i > b or i < a or a > b){ return ; } if(a == i and b == i){ ++tree[node] ; return ; } upd(2*node ,a , (a+b)/2 , i) ; upd(2*node + 1 , (a+b)/2 + 1 , b, i) ; tree[node] = tree[2*node] + tree[2*node+1] ; } void get(int a , int b){ int ans = 0 ; build(1,1,n) ; for(int i = 0 ; i < n ; ++i){ ans += qst(1,1,n,arr[i] + 1 ,n); upd(1,1,n,arr[i]); } if(ans < fans){ p1 = make_pair(a , b) ; fans = ans ; } } int main(){ // freopen("input.txt","r",stdin) ; ios_base::sync_with_stdio(0) ; cin.tie(0) ; int n ; cin >> n; vector<pair<int,int> > contri[2]; for(int i = 0 ; i < 2 ;++i) contri[i].resize(n); for(int i = 0 ; i < n ;++i){ cin >> arr[i] ; } p1.first = -1; long long lesser , best= 0; for(int i= 0 ; i < n; ++i){ upd(1,1,n,arr[i]); if(arr[i] ==1){ contri[0][i]=make_pair(0,i); continue ; } lesser = qst(1,1,n,1,arr[i]-1); lesser = arr[i]-1-lesser; contri[0][i]=make_pair(lesser,i); if(lesser > best){ best = lesser ; p1.first = i; } } if(p1.first ==-1){ cout << "Cool Array\n" ; return 0; } pair<int,int> ans= p1; long long d1=0,d2=0; best=0; sort(contri[0].rbegin(),contri[0].rend()); for(int j = 0 ; j < contri[0].size() ;++j){ p1.first = contri[0][j].second; build(1,1,n); d1=0; for(int i = p1.first ; i < n; ++i){ upd(1,1,n,arr[i]); if(arr[i]>arr[p1.first]){ d1--; } else if(arr[i] < arr[p1.first]){ d1++; } d2=qst(1,1,n,arr[i]+1,n)-qst(1,1,n,1,arr[i]-1); if(arr[i]>arr[p1.first]){ d2++; } else if(arr[i] < arr[p1.first]){ d2--; } if(d1+d2 > best){ p1.second=i; ans=p1; best=d1+d2; } } if (clock()>=0.8*CLOCKS_PER_SEC) break; } long long delta = best ; pair<int,int> p2; long long great=0; best = 0; build(1,1,n); for(int i = 0 ; i < n ; ++i){ upd(1,1,n,arr[i]); great = qst(1,1,n,arr[i]+1,n); contri[1][i]=make_pair(great,i); if(great>best){ best =great; p2.second=i; } } sort(contri[1].rbegin() , contri[1].rend()); for(int j = 0 ; j < contri[1].size() ; ++j){ p2.second = contri[1][j].second; build(1,1,n); d1=0,d2=0; for(int i = p2.second; i >=0;--i){ upd(1,1,n,arr[i]); if(arr[i]>arr[p2.second]){ d1++; } else if(arr[i] < arr[p2.second]){ d1--; } d2 = (qst(1,1,n,1,arr[i]-1) - qst(1,1,n,arr[i]+1,n)) ; if(arr[i]>arr[p2.second]) d2--; else if(arr[i] < arr[p2.second]) d2++; if(d1 + d2 >= delta){ delta = d1 + d2 ; ans = make_pair(i,p2.second) ; } } if (clock()>=1.7*CLOCKS_PER_SEC) break; } cout << ans.first + 1 << " " << ans.second + 1 << "\n" ; return 0 ; }