[题目链接](http://www.luogu.org/problem/show?pid=2832
题解:我们对这道题目进行分析,发现这道题目要求的实际上是最长的波动子序列。
对于一段单调的序列(注意,这里的单调指的是单调不增或者单调不减),我们最多从中取两个点。
所以,如果我们取整个序列的拐点的话,能够得到最优方案。
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int n,tot,flag;//1表示当前上升,2表示当前下降,初始为0
int a[100005];
inline void init()
{
cin>>n;
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
tot=1;flag=0;//第一个必然保留
}
inline void work()
{
for(int i=2;i<=n;i++)
{
if(a[i]>a[i-1]&&flag!=1)//上升且未统计
{
flag=1;
tot++;
}
if(a[i]<a[i-1]&&flag!=2)
{
flag=2;
tot++;
}
}
printf("%d\n",tot);
}
int main()
{
init();
work();
return 0;
}