#include <bits/stdc++.h> #define ll long long #define ull unsigned long long #define MOD 1000000007 #define INF 999999999999 using namespace std; long long mind = 0, mine = 0; #define MAXN 500005 int N; ll tree2[500005]; ll read(long long idx){ ll sum = 0; while (idx > 0){ sum += tree2[idx]; idx -= (idx & -idx); } return sum; } void update(long long idx ,ll val){ while (idx <= N){ tree2[idx] += val; idx += (idx & -idx); } } ll tree3[500005]; ll read3(long long idx){ ll sum = 0; while (idx > 0){ sum += tree3[idx]; idx -= (idx & -idx); } return sum; } void update3(long long idx ,ll val){ while (idx <= N){ tree3[idx] += val; idx += (idx & -idx); } } ll tree4[500005]; ll read4(long long idx){ ll sum = 0; while (idx > 0){ sum += tree4[idx]; idx -= (idx & -idx); } return sum; } void update4(long long idx ,ll val){ while (idx <= N){ tree4[idx] += val; idx += (idx & -idx); } } long long a[500005],b[500005]; int main() { ios_base::sync_with_stdio(false); cin.tie(0); long long treeIndex = 0; long long n; cin >> n; N = n; bool f = true; cin >> a[1]; b[1] = a[1]; for(long long i=2;i<=n;i++) { cin >> a[i]; b[i] = a[i]; } sort(b+1,b+n+1); for(long long i=1;i<=n;i++) { if(b[i] != a[i]) { f = false; break; } } if(f) { cout << "Cool Array\n"; return 0; } f = true; for(long long i=1;i<=n;i++) { if(b[i] != a[n-i+1]) { f = false; break; } } if(f) { cout << 1 << " " << n << endl; return 0; } long long finans=-1; long long swp = -1; long long grind = 0; //cout<<"earlier mind: "<<mind<<"\n"; mind = -1; long long inv; long long max_inv = 0; inv = (read3(a[1]-1)); if(max_inv<inv) { mind = 1; max_inv = inv; } update3(a[1],1); for(long long i=2;i<=n;i++) { inv = ((i-1)-read3(a[i]-1)); if(max_inv<inv) { mind = i; max_inv = inv; } update3(a[i],1); } //cout<<"later mind: "<<mind<<"\n"; mine = n; long long inv2; long long min_inv = 0; inv2 = (read4(a[n]-1)); if(min_inv < inv2) { mine = n; min_inv = inv2; } update4(a[n],1); for(long long i=n-1;i>=1;i--) { inv2 = (read4(a[i]-1)); if(min_inv <= inv2) { mine = i; min_inv = inv2; } update4(a[i],1); } //cout << "mine = " << mine; // check for descending bool desc = true; for(int i=2;i<=n;i++) { if(a[i-1]<a[i]) { desc = false; } } if(desc) { cout<<"1 "<<n<<"\n"; return 0; } long long lind = mind - 1; while(lind>=mine) { long long tmpans = 0; long long rind = mind; if(a[lind] > a[rind] ) { long long smaller = read(a[lind] - 1); tmpans += smaller; tmpans -= (rind-lind-smaller); update(a[lind], 1); if(a[lind]>a[rind]) { grind += 1; } tmpans+=grind; tmpans-=(rind-lind-grind); } if(swp <= tmpans) { swp = tmpans; finans = lind; } lind--; } cout << finans << " " << mind << endl; // Intrav(tree, 0); return 0; }