这是ac了的,一个前缀记录,一个用后缀记录
int a[N];
int z[N],f[N];
void solve() {
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
z[i] = f[i] = 0;
}
int res = inf;
f[1] = 1;
for(int i=2;i<=n;i++){
f[i] = f[i-1];
if(a[i] >= a[i-1]) f[i]++;
}
for(int i=n-1;i>=1;i--){
z[i] = z[i+1];
if(a[i] >= a[i+1])z[i]++;
}
for(int i=1;i<=n+1;i++){
res = min(res,f[i-1]+z[i]);
}
cout<<min(res,min(f[n],z[1]))<<endl;
}
这是都用前缀记录的wa了,感觉思路一样啊
int a[N];
int z[N],f[N];
void solve() {
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
z[i] = f[i] = 0;
}
int res = inf;
f[1] = 1;
for(int i=2;i<=n;i++){
z[i] = z[i-1];
f[i] = f[i-1];
if(a[i] < a[i-1]){
z[i]++;
}
else if(a[i] > a[i-1]) f[i]++;
else {
z[i]++;f[i]++;
}
}
for(int i=1;i<=n+1;i++){
res = min(res,f[i-1]+z[n]-z[i]);
}
cout<<min(res,min(f[n],z[n]))<<endl;
}