nyoj 117 求逆序数 (归并排序)
来源:互联网 发布:大数据分析和搜索引擎 编辑:程序博客网 时间:2024/06/05 23:40
求逆序数
时间限制:2000 ms | 内存限制:65535 KB
难度:5
描述
在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序。一个排列中逆序的总数就称为这个排列的逆序数。
现在,给你一个N个元素的序列,请你判断出它的逆序数是多少。
比如 1 3 2 的逆序数就是1。
输入
第一行输入一个整数T表示测试数据的组数(1<=T<=5)
每组测试数据的每一行是一个整数N表示数列中共有N个元素(2〈=N〈=1000000)
随后的一行共有N个整数Ai(0<=Ai<1000000000),表示数列中的所有元素。
数据保证在多组测试数据中,多于10万个数的测试数据最多只有一组。
输出
输出该数列的逆序数
样例输入
2
2
1 1
3
1 3 2
样例输出
0
1
解题思路:首先看题目上的信息,数组很大,到百万,普通的求法肯定会超时,这时我就想到了stl中有个求全排列的函数,借用它来求逆序数,结果依然超了,最后才不得不借用归并排序来求逆序数,因为它不但稳定而且可以时间复杂度为nlogn,只需在合并的时候如果第一个数组的元素大于第二个数组的元素就将第二个数组后边的元素加入到逆序数中。
#include <iostream>#include <bits/stdc++.h>using namespace std;long long int a[1000005],b[1000005],sum;void Merge(int low,int mid,int high)//合并{ int i=low,j=mid+1,k=0; while(i<=mid&&j<=high) { if(a[i]>a[j]){b[k++]=a[i++];sum+=high-j+1;} else b[k++]=a[j++]; } while(i<=mid)b[k++]=a[i++]; while(k--) a[low+k]=b[k];}void MergeSort(int left,int right)//将原数组分成两部分的有序数组{ if(right<=left) return; int mid = (left+right)/2; MergeSort(left,mid); MergeSort(mid+1,right); Merge(left,mid,right);}int main(){ int T;scanf("%d",&T); while(T--) { int n;sum=0; scanf("%d",&n); for(int i=0;i<n;i++) scanf("%lld",&a[i]); MergeSort(0,n-1); printf("%lld\n",sum); } return 0;}
0 0
- NYOJ 117 求逆序数【归并排序求逆序数】
- 归并排序求逆序数 NYOJ 117
- nyoj 求逆序数(归并排序)
- nyoj-117(归并排序求逆序数)
- NYOJ 117 求逆序数 (归并排序)
- nyoj 117 求逆序数 (归并排序)
- NYOJ - 求逆序数(归并排序)
- NYOJ 117 求逆序数 【树状数组】或【归并排序】
- NYOJ-117 求逆序数(树状数组或归并排序)
- ACM--归并排序&&树状数组--nyoj 117--求逆序数
- nyoj 322 117 求逆序数 归并排序
- nyoj 117 归并求逆序数
- nyoj 117 求逆序数 【归并排序&&逆序数反转次数】
- poj 1804 (nyoj 117)Brainman : 归并排序求逆序数
- nyoj 117 求逆序数【归并求逆序】
- 1881: 求逆序数(归并排序求逆序数)
- NYOJ 322 Sort(归并排序求逆序数)
- NYOJ117-求逆序数(归并排序)
- ocos2d-x 在 Windows下开启控制台窗口打印 Log
- Hash 入门课堂笔记
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose) (莫队)
- 如何在C#中读写INI文件
- 剑指offer(C++)——把二叉树打印成多行
- nyoj 117 求逆序数 (归并排序)
- 下拉选择框可编辑
- 浅谈hash
- 十年程序生涯悟
- 开源 java CMS
- php odbc 连接mysql数据库--适用于通达OA2016
- 二十八 Swift3.0之 继承
- 安装Ubuntu之后默认英文,选简体中文,正常来说这样装好就应该能用的,可是这个时候又出现了错误,說:broken package database. 请用apt-get install -f解决问题
- Flink DataStream API Programming Guide学习&译文(未完待续)