比赛 NOIP2023模拟赛3 评测结果 WWTTTTTTTE
题目名称 期望逆序对 最终得分 0
用户昵称 元始天尊 运行时间 7.169 s
代码语言 C++ 内存使用 5.51 MiB
提交时间 2023-11-15 12:07:19
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
const long long mod=1e9+7;
int a[101000],n;    
int b[101000],r[100010];
long long ans,sum;
long long C(long long n)
{
    return n*(n-1)/2;
}
void msort(int s,int t)
{
    if(s==t) return;
    int mid=(s+t)/2;
    msort(s,mid);
    msort(mid+1,t);
    int i=s,j=mid+1,k=s;
    while(i<=mid&&j<=t)
    {
        if(b[i]<=b[j])
        {
            r[k]=b[i];k++;i++;
        }
        else
        {
            r[k]=b[j];k++;j++;
            ans+=mid-i+1;
        }
    }
    while(i<=mid)
    {
        r[k]=b[i];k++;i++;
    }
    while(j<=t)
    {
        r[k]=b[j];k++;j++;
    }
    for(int i=s;i<=t;i++) b[i]=r[i];
}
long long nxd(int x,int y)
{
    for(int i=1;i<=n;i++) b[i]=a[i];
    swap(b[x],b[y]);
    msort(1,n);
    return ans;
}
int main()
{
    freopen("starlit.in","r",stdin);
    freopen("starlit.out","w",stdout);
    int k;
    cin>>n>>k;
    for(int i=1;i<=n;i++) cin>>a[i];
    for(int i=1;i<=n-1;i++)
    {
        for(int j=i+1;j<=n;j++)
        {
            ans=0;
            sum+=nxd(i,j);
        }
    }
    int s1=C(n);
    for(int i=1;i<=k-1;i++)
    {
        sum*=s1%mod;
        sum%=mod;
    }
    cout<<sum<<endl;
    return 0;
}