博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
The Number of Inversions(逆序数)
阅读量:4552 次
发布时间:2019-06-08

本文共 1517 字,大约阅读时间需要 5 分钟。

For a given sequence A={

a0,a1,...an1}A={a0,a1,...an−1}, the number of pairs (i,j)(i,j) where ai>ajai>aj and i<ji<j, is called the number of inversions. The number of inversions is equal to the number of swaps of Bubble Sort defined in the following program:

bubbleSort(A)  cnt = 0 // the number of inversions  for i = 0 to A.length-1    for j = A.length-1 downto i+1      if A[j] < A[j-1]	swap(A[j], A[j-1])	cnt++  return cnt

For the given sequence AA, print the number of inversions of AA. Note that you should not use the above program, which brings Time Limit Exceeded.

Input

In the first line, an integer nn, the number of elements in AA, is given. In the second line, the elements aiai (i=0,1,..n1i=0,1,..n−1) are given separated by space characters.

output

Print the number of inversions in a line.

Constraints

  • 1n200,0001≤n≤200,000
  • 0ai1090≤ai≤109
  • aiai are all different

Sample Input 1

53 5 2 1 4

Sample Output 1

6

Sample Input 2

33 1 2

Sample Output 2

2

已知逆序数等于冒泡排序的序列,但这题冒泡排序肯定超时。这题用归并排序优化一下就行。

AC代码

#include
#include
#include
#include
#include
using namespace std;#define MAX 500000#define INF 2e9int L[MAX/2+2],R[MAX/2+2];long long cnt=0;long long merge(int A[],int n,int left,int mid,int right){ long long cnt=0; int n1=mid-left; int n2=right-mid; for(int i=0;i
>n;for(int i=0;i
>A[i];cnt=mergeSort(A,n,0,n);cout<
<

 

 

转载于:https://www.cnblogs.com/hh13579/p/10859434.html

你可能感兴趣的文章
Jquery EasyUI封装简化操作
查看>>
OO第一单元总结
查看>>
[原创]你所需要了解的软件测试相关标准
查看>>
最近这么火的iOS视频直播
查看>>
程序员陪女朋友自拍杆哪个好?自拍杆品牌推荐
查看>>
output 参数在存储过程中的用法
查看>>
大数加法和乘法(高精度)
查看>>
利用SynchronizationContext.Current在线程间同步上下文
查看>>
单片机reg51.h头文件详解(1)
查看>>
python各种类型转换-int,str,char,float,ord,hex,oct等
查看>>
sublime Text3 快捷键
查看>>
19 年书单
查看>>
规范 : Sql statusEnum
查看>>
jQuery的.live()和.die() 使用介绍
查看>>
mybatis
查看>>
Chord算法(原理)
查看>>
cocos2d-html5
查看>>
不变模式
查看>>
RabbitMQ安装与搭建
查看>>
【转】UITextView检查已输入字符字数
查看>>