P1970 花匠
题解
这道题可以贪心做鸭
理解题意,说人话就是给出一个序列,让你找到最长波动序列的长度
把样例画出来也就是这样:
然而实际你只需要保留波峰波谷的点就行了
下面找最长波动序列
PS:
当m>1的时候,下面的条件只能满足一个
也就是数据
5 2 0 2 4 2
ans=4
(不可以保留点2 3 4 5 6)
代码
#include<bits/stdc++.h> using namespace std; const int maxn=1e6+10; int a[maxn],n,m=1; int flagup=0,flagdw=0; inline int read() { int ans=0; char last=' ',ch=getchar(); while(ch<'0'||ch>'9') last=ch,ch=getchar(); while(ch>='0'&&ch<='9') ans=ans*10+ch-'0',ch=getchar(); if(last=='-') ans=-ans; return ans; } int main() { n=read(); for(int i=1;i<=n;i++) a[i]=read(); for(int i=2;i<=n;i++) { if(a[i]>a[i-1]) { flagup=1; if(flagdw) { m++; flagdw=0; } } if(a[i]<a[i-1]) { flagdw=1; if(flagup) { m++; flagup=0; } } } printf("%d ",m+1); return 0; }