记录编号 |
353886 |
评测结果 |
AAAAAAAAAA |
题目名称 |
排序工作量-加强版 |
最终得分 |
100 |
用户昵称 |
NVIDIA |
是否通过 |
通过 |
代码语言 |
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(){;}