https://blog.csdn.net/mrvector/article/details/81090165

【题解】

方法与求逆序对的个数类似,用归并排序分治求解。不同之处在于添加了一个虚拟指针pointer。

【代码】

 #include <iostream>
using namespace std;
#define maxn 200005 int s[maxn], temp[maxn];
long long ans; void Merge(int left, int right, int mid)
{
int i = left, j = mid + , k = left;
int pointer = left;
while (i <= mid && j <= right) {
if (s[i] > s[j]) {
temp[k++] = s[j];
while (pointer <= mid && s[pointer] <= * s[j])
pointer++;
if (pointer < mid + )
ans += mid - pointer + ;
j++;
}
else {
temp[k++] = s[i];
i++;
}
}
while (i <= mid)
temp[k++] = s[i++];
while (j <= right)
temp[k++] = s[j++];
for (int i = left; i <= right; i++)
s[i] = temp[i];
} void MergeSort(int left, int right)
{
int mid = (left + right) >> ;
if (left < right) {
MergeSort(left, mid);
MergeSort(mid + , right);
Merge(left, right, mid);
}
} int main()
{
int N;
cin >> N;
for (int i = ; i < N; i++)
cin >> s[i];
MergeSort(, N - );
cout << ans << endl;
//system("pause");
return ;
}

OpenJudge 求重要逆序对数的更多相关文章

  1. 怎样求逆序对数(Inverse Number)?

    #返回上一级 @Author: 张海拔 @Update: 2014-01-14 @Link: http://www.cnblogs.com/zhanghaiba/p/3520089.html /* * ...

  2. POJ 2299 Ultra-QuickSort (求序列的逆序对数)

    题意:废话了一大堆就是要你去求一个序列冒泡排序所需的交换的次数. 思路:实际上是要你去求一个序列的逆序队数 看案例: 9 1 0 5 4 9后面比它小的的数有4个 1后面有1个 0后面没有 5后面1个 ...

  3. Ultra-QuickSort(树状数组求逆序对数)

    Ultra-QuickSort 题目链接:http://poj.org/problem?id=2299 Time Limit: 7000MS   Memory Limit: 65536K Total ...

  4. 给出一列数a1,a2,a3....an,求它们的逆序对数,即有多少个有序对(i,j) 使得iaj,n高达10的6次方

    //归并排序 //#include<stdio.h> //#include<string.h> //#include<algorithm> //#include&l ...

  5. Time Limit Exceeded 求逆序对数。

    /** 题目:Time Limit Exceeded 链接:https://oj.ejq.me/problem/28 题意:求逆序对数. 思路:树状数组求逆序对数.维护前面有多少个<=当前数的数 ...

  6. POJ 1840 Brainman(逆序对数)

    题目链接:http://poj.org/problem?id=1804 题意:给定一个序列a[],每次只允许交换相邻两个数,最少要交换多少次才能把它变成非递降序列. 思路:题目就是要求逆序对数,我们知 ...

  7. Counter Strike HDU 2443 逆序对数

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=2443 这个题目尝试了很多种方法都过不去,上网查了一下网友们的的思路,竟然和逆序对数有关系!! 题目大意: ...

  8. BZOJ - 3744 Gty的妹子序列 (区间逆序对数,分块)

    题目链接 静态区间逆序对数查询,这道题用线段树貌似不好做,可以把区间分成$\sqrt n$块,预处理出两个数组:$sum[i][j]$和$inv[i][j]$,$sum[i][j]$表示前i个块中小于 ...

  9. 用树状数组求逆序对数(poj2299)

    Ultra-QuickSort Time Limit: 7000MS   Memory Limit: 65536K Total Submissions: 46995   Accepted: 17168 ...

随机推荐

  1. goreleaser 方便的go 二进制包分发工具

    goreleaser 可以帮助我们进行go 二进制包的快速,简单分发,我们可以用来创建一个github release 以及发布到homwbrew formula . 安装 mac 系统,实际根据自己 ...

  2. CentOS6.x 下安装Python pyyaml模块

    Python中使用yaml时候,需要安装下组件pyyaml,直接安装pyyaml时提示“ext/_yaml.c:4:20: error: Python.h: No such file or direc ...

  3. Jmeter使用自定义编写代码

    原文地址:http://blog.csdn.net/li_ok/article/details/1487685 我们在做性能测试时,有时需要自己编写测试脚本,很多测试工具都支持自定义编写测试脚本,比如 ...

  4. Spring 集成Junit单元测试

    1.在pom增加junit和spring-test <dependency> <groupId>junit</groupId> <artifactId> ...

  5. npm install 包 失败解决方法

    在ionic 安装包的时候 npm install xxx --save 出现如下错误 查看日志文件 14 verbose stack SyntaxError: Unexpected token &l ...

  6. RedHat如何关闭防火墙

    1.查看防火墙是否已开启 #可以查看到iptables服务的当前状态. service iptables status​ 上图表示防火墙已关闭. 2.关闭防火墙 关闭防火墙的方法为:   1)永久性生 ...

  7. MySQL分析数据运行状态利器【SHOW PROCESSLIST】

    这个博文,将只是简单的记录一下,我们的数据库操作和使用中,加索引加不上去,分析的过程,其实比较简单,就是看有没有连接进程还在操作表.有的话,将其停掉(不影响业务的场景下). 今天的主角是: SHOW ...

  8. shopnc-setNcCookie-后台验证码

    function setNcCookie($name, $value, $expire='3600', $path='', $domain='.a.cn', $secure=false){ if (e ...

  9. 【java】浅谈while 和do-while

    while语法格式:while(布尔表达式){//语句}先判断布尔表达式,如果为true就会执行循环体中的语句,然后再判断布尔表达式,一直到布尔表达式为false,然后循环结束.通常用算术运算符(++ ...

  10. 帆软:不使用 __parameters__ 传参,问题。

    原帖地址:http://bbs.fanruan.com/thread-117614-1-1.html 在设计器本地可以用下面方式传参数,这个方式跟 &userID=28 的结果是一样的. Re ...