#include <bits/stdc++.h>
using namespace std;
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
int n;
cin >> n;
vector<int> tab(n);
int maxV = 0;
for(int i=0; i<n; i++){
cin >> tab[i];
maxV = max(maxV, tab[i]);
}
vector<int> tab2(2*n);
for(int i=0; i<2*n; i++){
tab2[i] = tab[i%n];
}
vector<int> anss(2*n);
/*for(int i=0; i<2*n; i++){
anss[i] = ansOFv[tab2[i]];
for(int j=0; j<=tab2[i]; j++) ansOFv[j] = max(ansOFv[j], i+1);
}*/
stack<pair<int, int>> S;
for(int i=0; i<2*n; i++){
int ile = 1;
while(!S.empty() && S.top().first < tab2[i]){
ile += S.top().second;
S.pop();
}
anss[i] = i - ile + 1;
S.push({tab2[i], ile});
// cout << anss[i] << " ";
}
vector<int> zlicz(max(maxV, 2*n)+3, 0);
long long int ans = 0, ansNow = 0;
for(int i=2*n-1; i>=0; i--){
if(anss[i] <= i) ansNow++;
ansNow -= zlicz[i+1];
ans = max(ans, ansNow);
zlicz[anss[i]]++;
// cout << ansNow << " ";
}
cout << ans;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | #include <bits/stdc++.h> using namespace std; int main(){ ios_base::sync_with_stdio(false); cin.tie(0); int n; cin >> n; vector<int> tab(n); int maxV = 0; for(int i=0; i<n; i++){ cin >> tab[i]; maxV = max(maxV, tab[i]); } vector<int> tab2(2*n); for(int i=0; i<2*n; i++){ tab2[i] = tab[i%n]; } vector<int> anss(2*n); /*for(int i=0; i<2*n; i++){ anss[i] = ansOFv[tab2[i]]; for(int j=0; j<=tab2[i]; j++) ansOFv[j] = max(ansOFv[j], i+1); }*/ stack<pair<int, int>> S; for(int i=0; i<2*n; i++){ int ile = 1; while(!S.empty() && S.top().first < tab2[i]){ ile += S.top().second; S.pop(); } anss[i] = i - ile + 1; S.push({tab2[i], ile}); // cout << anss[i] << " "; } vector<int> zlicz(max(maxV, 2*n)+3, 0); long long int ans = 0, ansNow = 0; for(int i=2*n-1; i>=0; i--){ if(anss[i] <= i) ansNow++; ansNow -= zlicz[i+1]; ans = max(ans, ansNow); zlicz[anss[i]]++; // cout << ansNow << " "; } cout << ans; } |
English