题意:序列a[n]有多少种排列方式a‘[n]使函数\(F=\sum_{1\le l \le r\le n}min_{l\le i \le r}a‘[i]最小\)
题解:简述一个EOJ官方题解。
1.先假设a‘的最小值唯一且为\(a‘_i\)。那么i=1或i=n是最大化F的充要条件
prove.希望包含最小值的区间的数量最小,当且仅当i=1或者i=n时[l,r]的个数能取到最小值。
2.有x个最小值,那方最小值的方案数是x+1(所有的数相同的情况除外)
3.剩下是子问题
4.也就是如果a中有m个不一样的树, b1,...,bm-1,bm
ans=(b1+1)!...(bm-1+1)!*bm!
tag:性质题
#include<bits/stdc++.h>
using namespace std;
const int maxn=5e5+10;
typedef long long ll;
const int mod=1e9+7;
ll a[maxn];
int main()
{
ll n;scanf("%lld",&n);
for(int i=1;i<=n;i++)
scanf("%lld",a+i);
sort(a+1,a+1+n);
if(n==1){ printf("%lld",1ll);return 0;}
ll num=1,ans=2;
for(int i=2;i<n;i++)
{
if(a[i]==a[i-1]) num++,ans*=(num+1);
else num=1,ans*=(num+1);
}
printf("%lld",ans);
}
原文:https://www.cnblogs.com/zx0710/p/14022492.html