记录编号 443732 评测结果 AAAAAAAAAA
题目名称 排序工作量-加强版 最终得分 100
用户昵称 Gravatar123 是否通过 通过
代码语言 C++ 运行时间 0.111 s
提交时间 2017-08-31 21:52:04 内存使用 7.94 MiB
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <stdio.h>
using namespace std;
int q[1000012],ya[1000012];
int n,d=0;
int hh(int u){return u&-u;}
void insert(int u)
{
	if(u==0)return;///啊啊,竟然还有0
	while(u<=d+10)
	{
		q[u]++;
		u+=hh(u);
	}
}
int find(int u)
{
	long long ans=0;
	while(u>0)
	{
		ans+=q[u];
		u-=hh(u);
	}
	return ans;
}
int main(){
	freopen ("px.in","r",stdin);
	freopen ("px.out","w",stdout);
	int a,b,c,e;
	long long ans=0;
	scanf("%d",&n);
	for(a=1;a<=n;a++)
	{
		scanf("%d",&ya[a]);
		d=max(d,ya[a]);
	}
	for(a=1;a<=n;a++)
	{
		ans+=find(d+10)-find(ya[a]);//求逆序对find(n)-find(ya[a])就是在当前插入的这个点之前大于ya[a]的值的个数
		insert(ya[a]);//插入当前这个点到q中;
	}
	printf("%lld",ans);
	return 0;
}