思路

对于一个元素可以删除,则说明该元素在一个单调不降子段中且不为该子段的头尾。那么,我们就可以根据这个结论去找有多少个元素是可以删除的,用总元素减去可删除的元素即为答案

代码

#include <bits/stdc++.h>

using namespace std;

const int N = 1e6+10;
int a[N];

int main(){
	int n;
	scanf("%d",&n);
	int len = 0,del = 0;
	for(int i = 1;i <= n;i++){
		scanf("%d",&a[i]);
		if(a[i] >= a[i-1]){
            // 如果当前元素不比前一个元素小,则单调不降子段长度加一
			len++;
		} else{
            // 否则单开一个子段
			len = 1;
		}
		if(len >= 3){
            // 上一个元素是可以删除的
			del++;
		}
	}
	printf("%d",n-del);
	return 0;
}