0分求调
查看原帖
0分求调
1176772
Sunyaoqi_abc0409楼主2024/8/2 17:45
#include <bits/stdc++.h>
using namespace std;
long long f[1000001],t,n,a[1000001],g[1000001],ct=0,ans=0; 
int main()
{
	cin>>t;
	while(t--)
	{
		cin>>n;
		memset(f,0,sizeof f);
		memset(g,0,sizeof g);
		for(int i=1;i<=n;i++)
		{
			cin>>a[i];
		}
		a[0]=-1e9;
		g[0]=1;
		ct=0,ans=0;
		for(int i=1;i<=n;i++)
		{
			for(int j=0;j<i;j++)
			{
				if(a[i]>=a[j])
				{
					f[i]=max(f[i],f[j]+1);
				}
			}
			if(f[i]>ct)
			{
				ct=f[i];
			}
		}
		for(int i=1;i<=n;i++)
		{
			for(int j=0;j<i;j++)
			{
				if(a[i]>=a[j]&&f[j]==f[i-1])
				{
					g[i]+=g[j];
				}
			}
		}
		for(int i=0;i<=n;i++)
		{
			if(f[i]==ct)ans+=g[i];
		}
		cout<<ct<<' '<<ans<<endl;
	}
	return 0;
}
2024/8/2 17:45
加载中...