#include <iostream> #include <limits.h> using namespace std; #define inf INT_MAX; int data[5003]; int dp[5003]; int count[5003]; int minNow=0; void lds(int n){ memset(dp,0,sizeof(dp)); minNow=0; memset(count,0,sizeof(count)); count[0]=1; int t; for(int i=1;i<=n;i++) { dp[i]=1; t=-1; for(int j=i-1;j>=0;j--) { if(data[i] < data[j]) { if(dp[j]+1==dp[i]&&data[j]!=t)//dp保证前面的子序列是有序的,如果有相同的,由t排除,如果不同的,两个的dp值肯定不同 {//所以不会出现count加了不应该加的东西,exp:6 7 6 7 6 4 count[i]+=count[j]; t=data[j];//同理,不可能出现data【j】之前相同的元素,所以直接可以赋值给下一个 } else if(dp[j]+1>dp[i]) { dp[i]=dp[j]+1; count[i]=count[j]; t=data[j]; } } } } int out=0; for(int i=0;i<n;i++) out=max(out,dp[i]); cout<<out<<" "; cout<<count[n]<<endl; }; int main() { int n; cin>>n; { for(int i=1;i<=n;i++) scanf("%d",&data[i]); data[0]=1<<30; lds(n+1); } }