以下为超时代码
#include<bits/stdc++.h>using namespace std;
int n;int a[1000000];int q=0;
void fix(int L,int R){
for(int i=L+1;i<R;i++) a[i]-=1;
q+=1;
}
int check(int L,int R){
for(int i=L+1;i<R;i++){
if(a[i]!=1) return 1;
}
return 0;
}
int x=0;void find(int b[100000]){
for(int i=1;i<=n;i++){
if(a[i]==1) b[x]==i,x++;
}
}
void turn(int b[100000]){
for(int i=0;i<x-1;i++){
for(int j=0;j<x;i++){
if(b[i]>b[j]) swap(b[i],b[j]);
}
}
}
int main(){
cin>>n;
a[0]=1,a[n+1]=1;
int b[100000]={0};
for(int i=1;i<=n;i++) cin>>a[i];
while(check(0,n+1)==1){
find(b);
turn(b);
for(int i=0;i<x-1;i++){
if(check(b[i],b[i+1])==1) fix(b[i],b[i+1]);
}
if(x==0) fix(0,n+1);
else fix(0,b[0]),fix(b[x-1],n+1);
}
cout<<q+1;
}