#include <bits/stdc++.h> #define F first #define S second using namespace std; typedef long long ll; #include <bits/stdc++.h> #define F first #define S second using namespace std; typedef long long ll; const int N=1<<19; pair<int, int> stmi[2*N]; int lazy[2*N]; void init(int i, int stl, int str){ if (stl==str){ stmi[i]={0, stl}; } else{ int mid=(stl+str)/2; init(i*2, stl, mid); init(i*2+1, mid+1, str); stmi[i]=max(stmi[i*2], stmi[i*2+1]); } } void adds(int, int, int, int, int, int); void golazy(int i, int stl, int str){ if (i<N&&lazy[i]!=0){ int mid=(stl+str)/2; adds(i*2, stl, mid, stl, mid, lazy[i]); adds(i*2+1, mid+1, str, mid+1, str, lazy[i]); lazy[i]=0; } } void adds(int i, int stl, int str, int l, int r, int v){ if (l>str) return; if (r<stl) return; if (l<=stl&&str<=r){ lazy[i]+=v; stmi[i].F+=v; } else{ golazy(i, stl, str); int mid=(stl+str)/2; adds(i*2, stl, mid, l, r, v); adds(i*2+1, mid+1, str, l, r, v); stmi[i]=max(stmi[i*2], stmi[i*2+1]); } } pair<int, int> getmax(int i, int stl, int str, int l, int r){ if (l>str) return {0, -1}; if (r<stl) return {0, -1}; if (l<=stl&&str<=r){ return stmi[i]; } else{ golazy(i, stl, str); int mid=(stl+str)/2; return max(getmax(i*2, stl, mid, l, r), getmax(i*2+1, mid+1, str, l, r)); } } int xa[5050505]; int xb[5050505]; int ya[5050505]; int yb[5050505]; vector<pair<int, int> > qs1[5050505]; vector<pair<int, int> > qs2[5050505]; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); int n; cin>>n; vector<int> a(n); int f=0; for (int i=0;i<n;i++){ cin>>a[i]; if (i>0&&a[i]<a[i-1]){ f=1; } } if (f==0){ cout<<"Cool Array\n"; return 0; } vector<pair<int, int> > mis; vector<pair<int, int> > mas; reverse(a.begin(), a.end()); for (int i=n-1;i>=0;i--){ if (mas.size()==0||a[i]>mas.back().F){ mas.push_back({a[i], i}); } int mi=0; int ma=mas.size()-1; while (mi<=ma){ int mid=(mi+ma)/2; if (mas[mid].F>=a[i]){ ma=mid-1; } else{ mi=mid+1; } } xa[i]=mi; xb[i]=mas.size()-1; } for (int i=0;i<n;i++){ if (mis.size()==0||a[i]<mis.back().F){ mis.push_back({a[i], i}); } int mi=0; int ma=mis.size()-1; while (mi<=ma){ int mid=(mi+ma)/2; if (mis[mid].F<=a[i]){ ma=mid-1; } else{ mi=mid+1; } } ya[i]=mi; yb[i]=mis.size()-1; //cout<<xa[i]<<" "<<xb[i]<<" "<<ya[i]<<" "<<yb[i]<<endl; qs1[xa[i]].push_back({ya[i], yb[i]}); qs2[xb[i]].push_back({ya[i], yb[i]}); } init(1, 0, N-1); pair<int, pair<int, int> > v={-1, {-1, -1}}; for (int i=0;i<n;i++){ for (auto qq:qs1[i]){ adds(1, 0, N-1, qq.F, qq.S, 1); } pair<int, int> ma=getmax(1, 0, N-1, 0, n); //if (i%10000==0) cout<<i<<endl; if (ma.F>=v.F&&ma.S>-1){ //cout<<i<<" "<<ma.F<<" "<<ma.S<<endl; v=max(v, {ma.F, {mas[i].S, mis[ma.S].S}}); } for (auto qq:qs2[i]){ adds(1, 0, N-1, qq.F, qq.S, -1); } } //cout<<v.F<<endl; cout<<n-v.S.F<<" "<<n-v.S.S<<endl; }