1.从左到右只考虑右边一遍,再从右到左考虑左边一遍,相当于左右考虑了
2.然后关键是1遍不一定行,while循环直到成功
https://www.luogu.com.cn/problem/B4091
#include<bits/stdc++.h>
using namespace std;
#define N 100011
typedef long long ll;
typedef pair<ll,int> pii;
int n,m,k;
ll a[N];
ll b[N];
ll an;
int main() {ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin>>n;for(int i=0;i<n;i++) cin>>a[i],b[i]=1;while(1){int f=1;for(int i=0;i<n;i++){if(a[(i-1+n)%n]<a[i]&&b[(i-1+n)%n]>=b[i]){b[i]=b[(i-1+n)%n]+1;f=0;}}for(int i=n-1;i>=0;i--){if(a[(i+1)%n]<a[i]&&b[(i+1)%n]>=b[i]){b[i]=max(b[(i+1)%n]+1,b[i]);f=0;}}if(f) break;}for(int i=0;i<n;i++) an+=b[i];cout<<an;return 0;
}