SDUT 3402 数据结构实验之排序五:归并求逆序数
数据结构实验之排序五:归并求逆序数
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
10
10 9 8 7 6 5 4 3 2 1
Example Output
45 DQE:
注意本题坑点!统计逆序数的变量必须要long int 或者long long int ,不然会溢出导致Wrang Anser!
逆序数即为 ( 每次归并时第二序列放置每个元素时第一序列剩余元素个数之和 ) 之和,参见代码内注释~
归并排序思想类似快排,代码逻辑简明易理解。
动态申请内存new确实比提前定义好数组直接使用耗时短,必要时用空间换时间!
#include <iostream>
#include <cstdio>
using namespace std; int f[],n; //!0 //如下所述temp在这里一同定义
long int count; //注意本题坑点!计数变量用int会溢出导致Wrong Anser!long可AC,还不行的话就long long!!! void gb(int l,int r)
{
if(l>=r)
return ;
int m=(l+r)/;
gb(l,m); gb(m+,r);
//rec
int i=l,j=m+,*temp=new int[r-l+ +],k=; //此处temp数组动态分配改为和f数组一起定义相同尺寸,用一倍的空间来去除动态内存分配的时间
while(i<=m&&j<=r)
{
if(f[i]<=f[j])
temp[k++]=f[i++];
else
temp[count+=m-i+,k++]=f[j++]; //归并时取第二序列每个元素时第一序列中剩余元素个数即为本次该元素的逆序数
}
while(i<=m)
temp[k++]=f[i++];
while(j<=r)
temp[k++]=f[j++];
k=;
while(l<=r)
f[l++]=temp[k++];
delete []temp; //!
} int main()
{
while(scanf("%d",&n)!=EOF)
{
int i;
for(i=;i<=n;i++)
scanf("%d",f+i);
count =;
gb(,n);
// for(i=1;i<=n;i++)
// printf("%d ",f[i]);
printf("%ld\n",count); //增加int长度时记得这里对应修改l个数!!!
}
return ;
} /***************************************************
User name: ***
Result: Accepted
Take time: 32ms
Take Memory: 1336KB
Submit time: 2016-12-09 19:21:49
****************************************************/
SDUT 3402 数据结构实验之排序五:归并求逆序数的更多相关文章
- SDUT-3402_数据结构实验之排序五:归并求逆序数
数据结构实验之排序五:归并求逆序数 Time Limit: 50 ms Memory Limit: 65536 KiB Problem Description 对于数列a1,a2,a3-中的任意两个数 ...
- SDUT 3401 数据结构实验之排序四:寻找大富翁.!
数据结构实验之排序四:寻找大富翁 Time Limit: 150MS Memory Limit: 512KB Submit Statistic Problem Description 2015胡润全球 ...
- SDUT 3344 数据结构实验之二叉树五:层序遍历
数据结构实验之二叉树五:层序遍历 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 已知一个按 ...
- SDUT OJ 数据结构实验之图论五:从起始点到目标点的最短步数(BFS)
数据结构实验之图论五:从起始点到目标点的最短步数(BFS) Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss P ...
- SDUT OJ 数据结构实验之二叉树五:层序遍历
数据结构实验之二叉树五:层序遍历 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Descri ...
- SDUT OJ 数据结构实验之排序四:寻找大富翁
数据结构实验之排序四:寻找大富翁 Time Limit: 200 ms Memory Limit: 512 KiB Submit Statistic Discuss Problem Descripti ...
- SDUT OJ 数据结构实验之排序三:bucket sort
数据结构实验之排序三:bucket sort Time Limit: 250 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem D ...
- SDUT OJ 数据结构实验之排序二:交换排序
数据结构实验之排序二:交换排序 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Descrip ...
- SDUT OJ 数据结构实验之排序一:一趟快排
数据结构实验之排序一:一趟快排 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Descrip ...
随机推荐
- HiHo 1032 最长回文子串 (Manacher算法求解)
/** * 求解最长回文字串,Manacher算法o(n)求解最长回文子串问题 **/ #include<cstdio> #include<cstdlib> #include& ...
- C程序设计语言阅读笔记
预处理器 ->.i 编译器 >.s 汇编器 >.o 链接器 --可执行文件 ------------------ math.h头文件包含各种数学函数的声明,所有函数都返回一个 ...
- Python3.7安装pyspider
下面是Python3.7安装pyspider的方式,能安装成功但是后期有很多问题,所以不建议,请使用3.5版本的Python进行安装!!!由于要做爬虫工作,所以学习pyspider框架,下面介绍安装步 ...
- Inception-Resnet-V2
零.Inception-Resnet-V2的网络模型 整体结构如下,整体设计简洁直观: 其中的stem部分网络结构如下,inception设计,并且conv也使用了7*1+1*7这种优化形式: inc ...
- 六、Jmeter后置处理器JSON Extractor
一.当接口返回是JSON格式的时候,就可以用JSON Extractor来抓取返回的值,用来关联或者断言. 1.首先,到V2EX中找一个接口,地址为:https://www.v2ex.com/p/7v ...
- CentOS7安装wget 及配置
yum -y install wget yum -y install setup yum -y install perl
- Java基础--反射Reflection
Reflection 反射能在运行时获取一个类的全部信息,并且可以调用类方法,修改类属性,创建类实例. 而在编译期间不用关心对象是谁 反射可用在动态代理,注解解释,和反射工厂等地方. -------- ...
- 【转】 Pro Android学习笔记(八七):了解Handler(1):组件和线程
目录(?)[-] 主线程消息队列和线程池 查看线程信息 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingf ...
- js页面埋点
页面埋点的作用,其实就是用于流量分析.而流量的意思,包含了很多:页面浏览数(PV).独立访问者数量(UV).IP.页面停留时间.页面操作时间.页面访问次数.按钮点击次数.文件下载次数等.而流量分析又有 ...
- Python操作txt文本文件
题目: 1.TXT文本文件中的内容为: url:http://119.23.241.154:8080/futureloan/mvc/api/member/login,mobilephone:13760 ...