1 条题解

  • 0
    @ 2026-10-25 17:53:28

    思路

    允许重复值且只计严格大于,N上限10万须64位答案,区别排列逆序数。

    参考程序(C++11)

    #include <bits/stdc++.h>
    using namespace std;
    long long f(vector<long long>&a,int l,int h){if(h-l<2)return 0;int m=(l+h)/2;long long ans=f(a,l,m)+f(a,m,h);vector<long long>b;int i=l,j=m;while(i<m||j<h){if(j==h||(i<m&&a[i]<=a[j]))b.push_back(a[i++]);else{b.push_back(a[j++]);ans+=m-i;}}copy(b.begin(),b.end(),a.begin()+l);return ans;}int main(){int n;cin>>n;vector<long long>a(n);for(auto &x:a)cin>>x;cout<<f(a,0,n)<<'\n';}
    
    • 1

    信息

    ID
    1310
    时间
    1000ms
    内存
    64MiB
    难度
    普及
    标签
    递交数
    1
    已通过
    1
    上传者