OpenJudge 求重要逆序对数
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 求重要逆序对数的更多相关文章
- 怎样求逆序对数(Inverse Number)?
#返回上一级 @Author: 张海拔 @Update: 2014-01-14 @Link: http://www.cnblogs.com/zhanghaiba/p/3520089.html /* * ...
- POJ 2299 Ultra-QuickSort (求序列的逆序对数)
题意:废话了一大堆就是要你去求一个序列冒泡排序所需的交换的次数. 思路:实际上是要你去求一个序列的逆序队数 看案例: 9 1 0 5 4 9后面比它小的的数有4个 1后面有1个 0后面没有 5后面1个 ...
- Ultra-QuickSort(树状数组求逆序对数)
Ultra-QuickSort 题目链接:http://poj.org/problem?id=2299 Time Limit: 7000MS Memory Limit: 65536K Total ...
- 给出一列数a1,a2,a3....an,求它们的逆序对数,即有多少个有序对(i,j) 使得iaj,n高达10的6次方
//归并排序 //#include<stdio.h> //#include<string.h> //#include<algorithm> //#include&l ...
- Time Limit Exceeded 求逆序对数。
/** 题目:Time Limit Exceeded 链接:https://oj.ejq.me/problem/28 题意:求逆序对数. 思路:树状数组求逆序对数.维护前面有多少个<=当前数的数 ...
- POJ 1840 Brainman(逆序对数)
题目链接:http://poj.org/problem?id=1804 题意:给定一个序列a[],每次只允许交换相邻两个数,最少要交换多少次才能把它变成非递降序列. 思路:题目就是要求逆序对数,我们知 ...
- Counter Strike HDU 2443 逆序对数
题目:http://acm.hdu.edu.cn/showproblem.php?pid=2443 这个题目尝试了很多种方法都过不去,上网查了一下网友们的的思路,竟然和逆序对数有关系!! 题目大意: ...
- BZOJ - 3744 Gty的妹子序列 (区间逆序对数,分块)
题目链接 静态区间逆序对数查询,这道题用线段树貌似不好做,可以把区间分成$\sqrt n$块,预处理出两个数组:$sum[i][j]$和$inv[i][j]$,$sum[i][j]$表示前i个块中小于 ...
- 用树状数组求逆序对数(poj2299)
Ultra-QuickSort Time Limit: 7000MS Memory Limit: 65536K Total Submissions: 46995 Accepted: 17168 ...
随机推荐
- goreleaser 方便的go 二进制包分发工具
goreleaser 可以帮助我们进行go 二进制包的快速,简单分发,我们可以用来创建一个github release 以及发布到homwbrew formula . 安装 mac 系统,实际根据自己 ...
- CentOS6.x 下安装Python pyyaml模块
Python中使用yaml时候,需要安装下组件pyyaml,直接安装pyyaml时提示“ext/_yaml.c:4:20: error: Python.h: No such file or direc ...
- Jmeter使用自定义编写代码
原文地址:http://blog.csdn.net/li_ok/article/details/1487685 我们在做性能测试时,有时需要自己编写测试脚本,很多测试工具都支持自定义编写测试脚本,比如 ...
- Spring 集成Junit单元测试
1.在pom增加junit和spring-test <dependency> <groupId>junit</groupId> <artifactId> ...
- npm install 包 失败解决方法
在ionic 安装包的时候 npm install xxx --save 出现如下错误 查看日志文件 14 verbose stack SyntaxError: Unexpected token &l ...
- RedHat如何关闭防火墙
1.查看防火墙是否已开启 #可以查看到iptables服务的当前状态. service iptables status 上图表示防火墙已关闭. 2.关闭防火墙 关闭防火墙的方法为: 1)永久性生 ...
- MySQL分析数据运行状态利器【SHOW PROCESSLIST】
这个博文,将只是简单的记录一下,我们的数据库操作和使用中,加索引加不上去,分析的过程,其实比较简单,就是看有没有连接进程还在操作表.有的话,将其停掉(不影响业务的场景下). 今天的主角是: SHOW ...
- shopnc-setNcCookie-后台验证码
function setNcCookie($name, $value, $expire='3600', $path='', $domain='.a.cn', $secure=false){ if (e ...
- 【java】浅谈while 和do-while
while语法格式:while(布尔表达式){//语句}先判断布尔表达式,如果为true就会执行循环体中的语句,然后再判断布尔表达式,一直到布尔表达式为false,然后循环结束.通常用算术运算符(++ ...
- 帆软:不使用 __parameters__ 传参,问题。
原帖地址:http://bbs.fanruan.com/thread-117614-1-1.html 在设计器本地可以用下面方式传参数,这个方式跟 &userID=28 的结果是一样的. Re ...