思路:
简单DP,0表示i在上升序列中,1表示在下降序列中,动手推推就好了
c o d e code code
#include<iostream>
#include<cstdio>
using namespace std;
int n, a[1010100];
int f[1010000][2];
int main()
{
scanf("%d", &n);
for(int i=1; i<=n; i++)
scanf("%d", &a[i]);
f[1][0]=f[1][1]=1;
for(int i=2; i<=n; i++)
{
if(a[i]>a[i-1])
f[i][0]=min(f[i-1][0], f[i-1][1]+1), f[i][1]=min(f[i-1][0]+1, f[i-1][1]+1);
if(a[i]<a[i-1])
f[i][0]=min(f[i-1][0]+1, f[i-1][1]+1), f[i][1]=min(f[i-1][0]+1, f[i-1][1]);
if(a[i]==a[i-1])
f[i][0]=f[i][1]=min(f[i-1][0], f[i-1][1]);
}
printf("%d", min(f[n][0], f[n][1]));
return 0;
}