分治法 | 逆序数

 51Nod_1019 逆序数

http://www.51nod.com/Challenge/Problem.html#!#problemId=1019

 

题目

在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序。一个排列中逆序的总数就称为这个排列的逆序数。如2 4 3 1中,2 1,4 3,4 1,3 1是逆序,逆序数是4。给出一个整数序列,求该序列的逆序数。

输入

第1行:N,N为序列的长度(n <= 50000);第2 - N + 1行:序列中的元素(0 <= A[i] <= 10^9)

输出

输出逆序数

样例输入

4
2
4
3
1

样例输出

4

分析

利用归并排序

C语言程序

#include

#define N 50000
int a[N],t[N];
int ans=0;

void VergeSort(int *a,int *t,int x,int y)
{
	int j;
	if(y-x>1){
		int m=(x+y)>>1;
		int p=x,q=m,i=x;
		VergeSort(a,t,x,m);
		VergeSort(a,t,m,y);
		while(p=y||(p

 

你可能感兴趣的:(算法)