记录编号 353886 评测结果 AAAAAAAAAA
题目名称 排序工作量-加强版 最终得分 100
用户昵称 GravatarNVIDIA 是否通过 通过
代码语言 C++ 运行时间 0.001 s
提交时间 2016-11-18 21:31:28 内存使用 0.24 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
using namespace std;
typedef long long ll;
ll ans;
int a[500001],t[50001],i,j,n;
inline int read()
{
	int x,f=1;char ch;
	while(ch=getchar(),!isdigit(ch))if(ch=='-')f=-1;x=ch-48;
	while(ch=getchar(),isdigit(ch))x=x*10+ch-48;return x*f;
}
inline void msort(int l,int m,int r)
{
int i = l;
    int j = m+1;
    int k = l;
    while(i <= m && j <= r)
    {
        if(a[i] > a[j])
        {
            t[k++] = a[j++];
            ans += m-i+1; 
        }else
        {
            t[k++] = a[i++];
        }
    }
    while(i <= m)t[k++] = a[i++];
    while(j <= r)t[k++] = a[j++];
    for(int p = l; p <= r; p++)a[p] = t[p];
}
inline void gg(int l,int r)
{
	 if(l < r)
    {
        int m = (l+r)>>1;
        gg(l, m);
        gg(m+1, r);
        msort(l, m, r);
    }
}
inline int DDDD()
{
	freopen("px.in","r",stdin);
	freopen("px.out","w",stdout);
    n=read();
	for(int i=1;i<=n;i++)
	a[i]=read();
	gg(1,n);
	cout<<ans<<endl;
}
int aa=DDDD();
int main(){;}