#include <bits/stdc++.h>

using namespace std;
#define IOS ios::sync_with_stdio(false), cin.tie(0);
typedef long long LL;

//const int N=;
int n;
int main()
{
    IOS
    cin>>n;
    vector<int> a(n), f(n, 1), dp(n, 1);
    for(int i=0; i<n; i++) cin>>a[i];
    for(int i=0; i<n; i++)
        for(int j=0; j<i; j++)
            if(a[i]>a[j]) f[i]=max(f[i], f[j]+1);
            else dp[i]=max(dp[i], dp[j]+1);
    int ans=0, res=0;
    for(int i=0; i<n; i++) ans=max(ans, f[i]), res=max(res, dp[i]);
    cout<<res<<"\n"<<ans;
    return 0;
}

根据Dilworth定理:最少的下降序列个数就等于整个序列最长上升子序列的长度

数据范围比较小,双重for循环即可,当然也可以二分优化

#牛客春招刷题训练营#