题目描述 Description给一个数组a1, a2 ... an,找到最长的上升降子序列ab1< .. <..bk。输出长度即可。输入描述 Input Description第一行,一个整数N。第二行 ,N个整数(N < = 1000000)输出描述 Output Description输出K的极大值,即最长不下降子序列的长度样例输入 Sample Input59 3 6 2 7样例输出 Sample Output3数据范围及提示 Data Size & Hintn<=1000000为了方便大家调试,数据名称已被修改——THREE
朴素做法O(n^2)
注意的是,答案是f的最大值。
//Writer:GhostCai && His Yellow Duck#include#define MAXN 1000005using namespace std;int f[MAXN],a[MAXN];int n;int main(){ cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; for(int i=1;i<=n;i++){ f[i]=1; for(int j=1;j f[i]) f[i]=f[j]+1; } } int ans=0; for(int i=1;i<=n;i++) ans=max(ans,f[i]); cout< <