题目描述:
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。
输入:
每个测试案例包括两行:
第一行包含一个整数n,表示数组中的元素个数。其中1 <= n <= 10^5。
第二行包含n个整数,每个数组均为int类型。
输出:
对应每个测试案例,输出一个整数,表示数组中的逆序对的总数。
样例输入:
4
7 5 6 4
样例输出:
5

总的想法是归并排序,但是在计算逆序对时,有些小问题要考虑,不能漏掉某些元素,一种比较好的做法就在归并时当遇到第一个v[left] > v[right]时,cnt += 所有左边的left以后的元素的个数,而不是cnt += 1。代码如下:

 #include <iostream>
#include <vector>
#include <cstdio>
using namespace std; int n;
vector<int> v;
unsigned long long cnt; void merge(vector<int> &v, int low, int mid, int high) {
if (high <= low) return;
vector<int> tmp(high - low + );
int idx1 = low, idx2 = mid + ;
int idx = ;
while (idx1 <= mid && idx2 <= high) {
if (v[idx1] > v[idx2]) {
tmp[idx++] = v[idx2++];
cnt += mid - idx1 + ;
} else {
tmp[idx++] = v[idx1++];
}
} if (idx1 > mid)
while (idx < tmp.size()) tmp[idx++] = v[idx2++]; if (idx2 > high) {
while (idx < tmp.size()) tmp[idx++] = v[idx1++];
} idx = ;
while (idx < tmp.size())
v[low+idx] = tmp[idx++];
} void mergeSort(vector<int> &v, int low, int high) {
if (high <= low) return;
int mid = (low + high) / ;
mergeSort(v, low, mid);
mergeSort(v, mid + , high);
merge(v, low, mid, high);
} int main() {
//freopen("a.in", "r", stdin);
while (cin >> n) {
v.resize(n);
cnt = ;
for (int i = ; i < n; ++i) {
cin >> v[i];
}
mergeSort(v, , v.size() - );
cout << cnt << endl;
}
return ;
}
/**************************************************************
Problem: 1348
User: hupo250
Language: C++
Result: Accepted
Time:200 ms
Memory:2500 kb
****************************************************************/

[Jobdu] 题目1348:数组中的逆序对的更多相关文章

  1. 剑指Offer - 九度1348 - 数组中的逆序对

    剑指Offer - 九度1348 - 数组中的逆序对2014-01-30 23:19 题目描述: 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个 ...

  2. 九度OJ 1348 数组中的逆序对 -- 归并排序

    题目地址:http://ac.jobdu.com/problem.php?pid=1348 题目描述: 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求 ...

  3. 【剑指offer】题目36 数组中的逆序对

    数组中任取两个数字,如果前面的数字大于后面的数字称为一个逆序对 如:1,2,1,2,1 有3个逆序对 思路:知道O(N2)肯定是错的.开始想hash,试图找到O(n)的算法,想了很久,找不到.后来想到 ...

  4. 九度oj 1348 数组中的逆序对

    原题链接:http://ac.jobdu.com/problem.php?pid=1348 归并排序求逆序对... #include<algorithm> #include<iost ...

  5. [jobdu]数组中的逆序对

    http://ac.jobdu.com/problem.php?pid=1348 数组中的逆序对也是个常见的题目,算法导论中也有一些描述,参考:http://www.cnblogs.com/wuyue ...

  6. 【剑指Offer面试编程题】题目1348:数组中的逆序对--九度OJ

    题目描述: 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数. 输入: 每个测试案例包括两行: 第一行包含一个整数n,表示数组 ...

  7. 九度oj题目1348:数组中的逆序对

    题目1348:数组中的逆序对 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2572 解决:606 题目描述: 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序 ...

  8. 九度oj 题目1348:数组中的逆序对

    题目描述: 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数. 输入: 每个测试案例包括两行: 第一行包含一个整数n,表示数组 ...

  9. 九度OJ 1348:数组中的逆序对 (排序、归并排序)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2777 解决:656 题目描述: 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组 ...

随机推荐

  1. java对象深入理解

    1.对象可以携带更多信息 2.对象的方法不占用堆的存储空间 3.对象的状态指的是成员变量的值 4.对象的方法操作的也都是成员变量信息,最后返回的结果也都赋值给成员变量. 5.所以,new对象时,就会在 ...

  2. [翻译] CKShapeView 支持CAShapeLayer

    CKShapeView 支持CAShapeLayer https://github.com/conradev/CKShapeView CKShapeView is a UIView subclass ...

  3. 解决 PHP Fatal error: Call-time pass-by-reference has been removed

    PHP在升级到5.4版本的php可能会出现这种错误: 如果这样使用函数(或者类)的话,会产生一个 PHP Fatal error:foo(&$var);实际上,这样用法在php5.3中就会有提 ...

  4. SIGSEGV异常时打印函数调用链

    C语言写的程序跑飞了,怎样打印出函数调用链呢? linux_dev_framework软件包中的trace_exception_test.c就是一个实现演示样例. 该程序有益产生一个内存訪问异常,然后 ...

  5. Oracle sql loader 使用案例

    Listing 1: ---------------------- dir *.csv type abc.csv sqlplus scott/tiger@orcl create table emp1 ...

  6. SPSS Clementine 数据挖掘入门3

    转摘:http://www.cnblogs.com/dekevin/archive/2012/04/27/2473683.html 了解SPSS Clementine的基本应用后,再对比微软的SSAS ...

  7. [RSpec] LEVEL 2 CONFIGURATION & MATCHERS

    Installing RSpec In this level we'll start by getting you setup on a regular Ruby project, then move ...

  8. ASP.NET HTTP500错误怎么办

    如图所示,HTTP500错误. 第一步:"开始"->"设置"->"控制面板"->"管理工具"-> ...

  9. 委托批量处理Excel

    在以前的博文中--CAD批量处理工具--BatchProc,即只要用户输入处理单个文件的代码,即可批量处理多个文件.使用起来特别方便. 在现在的地籍处理中,处理Excel的情况比较多,尤其需要反反复复 ...

  10. Matlab interpgui

    function interpgui(arg1,arg2) %INTERPGUI Behavior of interpolating functions. % Demonstrates interpo ...