4163 hzwer与逆序对

 时间限制: 10 s
 空间限制: 256000 KB
 题目等级 : 黄金 Gold
题目描述 Description

hzwer在研究逆序对。

对于数列{a},如果有序数对(I,j)满足:i<j,a[i]>a[j],则(i,j)是一对逆序对。

给定一个数列{a},求逆序对个数。

输入数据较大,请使用scanf代替cin读入。

输入描述 Input Description

第一行一个数n,表示{a}有n个元素。

接下来n个数,描述{a}。

输出描述 Output Description

一个数,表示逆序对个数。

样例输入 Sample Input

5

3 1 5 2 4

样例输出 Sample Output

4

数据范围及提示 Data Size & Hint

对于10%数据,1<=n<=100.

对于20%数据,1<=n<=10000.

对于30%数据,1<=n<=100000.

对于100%数据,1<=n<=1000000,1<=a[i]<=10^8.

#include<cstdio>
#include<iostream>
using namespace std;
#include<algorithm>
#include<cstring>
#define MAXN 1000001
struct node { long long v;
int id;
bool operator<(const node &p) const{return v<p.v;}
};
node a[MAXN+];
long long int c[MAXN+],b[MAXN+];
int n;
inline int lowbit(int x)
{
return x&(-x);
}
long long query(int x)
{
long long ans=;
while(x)
{
ans+=c[x];
x-=lowbit(x);
}
return ans;
}
void change(int x)
{
while(x<=n)
{
c[x]++;
x+=lowbit(x);
}
}
int main()
{
scanf("%d",&n);
memset(a,,sizeof(a));
memset(c,,sizeof(c));
memset(b,,sizeof(b));
for(int i=;i<=n;++i)
{
scanf("%d",&(a[i].v));
a[i].id=i;
}
sort(a+,a+n+);
int pre=-;
int prevalue=;
for(int i=;i<=n;++i)
{
if(pre!=a[i].v)
{
pre=a[i].v;
a[i].v=++prevalue;
}
else a[i].v=prevalue;
}
for(int i=;i<=n;++i)
b[a[i].id]=a[i].v;
long long int s=;
for(int i=n;i>=;--i)
{
change(b[i]);
s+=query(b[i]-);
}
cout<<s<<endl;
return ;
}

最新文章

  1. GridView的使用
  2. (转)ArcGIS制图技巧
  3. Linux入门学习,开启端口号
  4. 给select添加自定义值和选项
  5. ASP.NET MVC 4 让数据库自动迁移
  6. 用户登陆,退出等基本Action
  7. 第七章——DMVs和DMFs(2)——用DMV和DMF监控索引性能
  8. linuxlab下虚拟板与主机通信
  9. Linux系统中cgroup功能介绍
  10. JSON概述
  11. Erlang 编写 Kafka 客户端之最简单入门
  12. 解决thinkPHP3.2.3使用Smarty模板后无法使用系统常量问题
  13. 深入理解Java中的IO
  14. Objective-C优缺点
  15. openfalcon架构及相关服务配置详解
  16. springboot环境下配置过滤器和拦截器
  17. 面向对象的设计原则(JAVA)
  18. mfc CImageList和CListCtrl
  19. java中的安全模型(沙箱机制)
  20. UVAL 7902 2016ECfinal F - Mr. Panda and Fantastic Beasts

热门文章

  1. ansible 批量修改root密码
  2. css3中-moz、-ms、-webkit分别代表的意思
  3. javaScript获取文档中所有元素节点的个数
  4. js密码的匹配正则
  5. 记录一次Nginx跳转报错的问题
  6. Spring MVC框架下 从后台读取数据库并显示在前台页面【笔记自用 不推荐作为参考】
  7. hdu 3003 Pupu
  8. Python小程序之购物车
  9. 【Shell 编程基础第一部分】第一个Shell脚本HelloShell及一些简单的Shell基础书写与概念;
  10. 【反演复习计划】【bzoj1011】zap-queries