EOJ11月月赛

EOJ·11月月赛

题意:序列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