您的位置:首页 > 其它

逆序数的求法总结(归并、线段树、树状数组、离散化)

2015-12-05 14:56 381 查看
1、归并排序求逆序数
http://acm.nyist.net/JudgeOnline/problem.php?pid=117
在归并排序的过程中,比较关键的是通过递归,将两个已经排好序的数组合并,此时,若a[i] > a[j],则i到m之间的数都大于a[j],合并时a[j]插到了a[i]之前,此时也就产生的m-i+1个逆序数,而小于等于的情况并不会产生。

#include<stdio.h>
#include<algorithm>
using namespace std;
struct node{
int v;
int index;
};
node a[100];
int aa[100];//离散化后的数组
int n;
bool cmp(node a,node b){
return a.v < b.v;
}
int main(){
scanf("%d",&n);
for(int i = 1;i<=n;i++){
scanf("%d",&a[i].v);
a[i].index = i;
}
sort(a+1,a+1+n,cmp);
for(int i = 0;i<=n;i++)
aa[a[i].index] = i;
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: