有莫大佬来帮帮我罢
查看原帖
有莫大佬来帮帮我罢
753406
pengzizhuo楼主2023/11/25 20:20
#include <bits/stdc++.h>
using namespace std;
const int MAXN= 1e5 + 5;
int a[MAXN], x, n, dp[MAXN], maxn;
int pre[MAXN], ans;
int main() {
    while (cin >> x) a[++n] = x;
    reverse(a+1,a+1+n);
	int len=0; 
    for(int i=1;i<=n;i++)
	{
		x=a[i];
		if(x>a[len])
		{
			a[++len]=x;
		}
		else
		{
			int pos =lower_bound(a+1,a+1+len,x)-a;
			a[pos]=x;
		}
	}
    cout << len << endl;
    reverse(a+1,a+1+n);
    for(int i=1;i<=n;i++)
	{
		dp[i]=1;
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<i;j++)
		{
			if(a[i]>=a[j]&&dp[i]<dp[j]+1)
			{
				dp[i]=dp[j]+1;
				pre[i]=j;
			}
		}
	}
	for(int i=1;i<=n;i++)
	{
		ans=max(ans,dp[i]);
	}
    cout << ans << endl;
}

4分求助

2023/11/25 20:20
加载中...