1 条题解

  • 3
    @ 2023-1-14 9:43:42

    #include<bits/stdc++.h> using namespace std;long long read(){long long ans=0,f=1;char ch=getchar();while(!isdigit(ch))f*=(ch=='-')?-1:1,ch=getchar();while(isdigit(ch))ans=ans10+ch-'0',ch=getchar();return ansf;}struct Tuple{long long id,val;}tup[1000000],temp[1000000];long long cnt1[1000000],cnt2[1000000],sum,ans,n;void CDQ(long long l,long long r,long long cnt){if(l==r)return;long long mid=(l+r)>>1;CDQ(l,mid,cnt),CDQ(mid+1,r,cnt);for(long long i=l,j=mid+1,k=l,sum=0;k<=r;k++){if(j>r||i<=mid&&tup[i].val<=tup[j].val)temp[k]=tup[i++],sum++;else cnt[tup[j].id]+=sum,temp[k]=tup[j++];}for(long long i=l;i<=r;i++)tup[i]=temp[i];}int main(){cin>>n;for(long long i=1;i<=n;i++){tup[i]=(Tuple){i,read()};}CDQ(1,n,cnt1);for(long long i=1;i<=n;i++)while(i!=n+1-tup[i].id)swap(tup[i],tup[n+1-tup[i].id]);CDQ(1,n,cnt2);for(long long i=1;i<=n;i++)ans+=(long long)cnt1[i](n-i-cnt2[i])+(long long)(i-1-cnt1[i])*cnt2[i];cout<<ans;return 0;}

    • 1

    信息

    ID
    1558
    时间
    1000ms
    内存
    256MiB
    难度
    9
    标签
    递交数
    90
    已通过
    9
    上传者