数据结构实验之排序五:归并求逆序数
来源:互联网 发布:微信返利软件 编辑:程序博客网 时间:2024/06/01 22:44
数据结构实验之排序五:归并求逆序数
Time Limit: 50MS Memory Limit: 65536KB
Submit Statistic
Problem Description
对于数列a1,a2,a3…中的任意两个数ai,aj (i < j),如果ai > aj,那么我们就说这两个数构成了一个逆序对;在一个数列中逆序对的总数称之为逆序数,如数列 1 6 3 7 2 4 9中,(6,4)是一个逆序对,同样还有(3,2),(7,4),(6,2),(6,3)等等,你的任务是对给定的数列求出数列的逆序数。
Input
输入数据N(N <= 100000)表示数列中元素的个数,随后输入N个正整数,数字间以空格间隔。
Output
输出逆序数。
Example Input
1010 9 8 7 6 5 4 3 2 1
Example Output
45
Hint
#include <iostream>
int n;
long long sum;/////////////////////
int a[100001],t[100001];
using namespace std;
void Merge(int l1,int r1,int l2,int r2)
{
int p1=l1,p2=l2,p=0;
while(p1<=r1 && p2<=r2)
{
if(a[p1]<=a[p2])
{
t[p++]=a[p1++];
}
else
{
t[p++]=a[p2++];
sum+=r1-p1+1;//////////////////////////////
}
}
while(p1<=r1)
{
t[p++]=a[p1++];
}
while(p2<=r2)
{
t[p++]=a[p2++];
}
for(int i=l1;i<=r2;i++)
{
a[i]=t[i-l1];
}
}
void Msort(int l,int r)
{
if(l<r)
{
int mid=(l+r)/2;
Msort(l,mid);
Msort(mid+1,r);
Merge(l,mid,mid+1,r);
}
}
int main()
{
std::cin.tie(0);
ios::sync_with_stdio(false);
cin>>n;
int i;
for(i=0;i<n;i++)
{
cin>>a[i];
}
sum=0;
Msort(0,n-1);
cout<<sum<<endl;
return 0;
}
阅读全文
0 0
- 数据结构实验之排序五:归并求逆序数
- 数据结构实验之排序五:归并求逆序数
- 数据结构实验之排序五:归并求逆序数
- 数据结构实验之排序五:归并求逆序数
- SDUT3402数据结构实验之排序五:归并求逆序数
- 数据结构实验之排序五:归并求逆序数
- 数据结构实验之排序五:归并求逆序数
- 数据结构实验之排序五:归并求逆序数
- 数据结构实验之排序五:归并求逆序数
- SDUTACM 数据结构实验之排序五:归并求逆序数
- 数据结构实验之排序五:归并求逆序数
- 数据结构实验之排序五:归并求逆序数
- 数据结构实验之排序五:归并求逆序数
- 数据结构实验之排序五:归并求逆序数
- OJ3402数据结构实验之排序五:归并求逆序数
- 数据结构实验之排序五:归并求逆序数
- 数据结构实验之排序五:归并求逆序数
- SDUT3402数据结构实验之排序五:归并求逆序数
- C++知识点总结(笔试面试高频题)
- 有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
- LeetCode#93. Restore IP Addresses
- java中泛型测试总结
- Linux下 保存 git账号密码
- 数据结构实验之排序五:归并求逆序数
- 傅立叶描述子
- gdb 常用命令
- springboot学习(6)springboot整合Mybatis例子
- IDA脚本笔记(一)
- Java程序员工作3年,每天坐吃等死状态,该如何打破这种情况?
- VMware虚拟机启动CentOS黑屏的解决方案
- 牛市一宝:证券行业
- day07_for+可变参数