逆序数 UVALive 6508 Permutation Graphs
/*
题意:给了两行的数字,相同的数字连线,问中间交点的个数
逆序数:第一行保存每个数字的位置,第二行保存该数字在第一行的位置,接下来就是对它求逆序数
用归并排序或线段树求。想到了就简单了:)
*/
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <vector>
using namespace std; typedef long long ll;
const int MAXN = 1e5 + ;
const int INF = 0x3f3f3f3f;
int p[MAXN], a[MAXN];
int L[MAXN/+], R[MAXN/+];
ll ans; void Merge(int *a, int p, int q, int r)
{
int n1 = q - p + , n2 = r - q;
for (int i=; i<=n1; ++i) L[i] = a[p+i-];
for (int i=; i<=n2; ++i) R[i] = a[q+i];
L[n1+] = INF; R[n2+] = INF; int i = , j = ;
for (int k=p; k<=r; ++k)
{
if (L[i] <= R[j]) a[k] = L[i++];
else {a[k] = R[j++]; ans += n1 - i + ;}
}
} void MergeSort(int *a, int p, int r)
{
if (p < r)
{
int q = (p + r) / ;
MergeSort (a, p, q);
MergeSort (a, q + , r);
Merge (a, p, q, r);
}
} int main(void) //UVALive 6508 Permutation Graphs
{
// freopen ("I.in", "r", stdin); int t; scanf ("%d", &t);
while (t--)
{
int n; scanf ("%d", &n);
for (int i=; i<=n; ++i)
{
int x; scanf ("%d", &x); p[x] = i;
}
for (int i=; i<=n; ++i)
{
int x; scanf ("%d", &x); a[i] = p[x];
} ans = ;
MergeSort (a, , n);
printf ("%lld\n", ans);
} return ;
}
逆序数 UVALive 6508 Permutation Graphs的更多相关文章
- UVALive 6508 Permutation Graphs
Permutation Graphs Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Submit ...
- HDU 1394 Minimum Inversion Number(最小逆序数/暴力 线段树 树状数组 归并排序)
题目链接: 传送门 Minimum Inversion Number Time Limit: 1000MS Memory Limit: 32768 K Description The inve ...
- HDU-Minimum Inversion Number(最小逆序数)
Problem Description The inversion number of a given number sequence a1, a2, ..., an is the number of ...
- 逆序数2 HDOJ 1394 Minimum Inversion Number
题目传送门 /* 求逆序数的四种方法 */ /* 1. O(n^2) 暴力+递推 法:如果求出第一种情况的逆序列,其他的可以通过递推来搞出来,一开始是t[1],t[2],t[3]....t[N] 它的 ...
- HDU 1394 Minimum Inversion Number(线段树/树状数组求逆序数)
Minimum Inversion Number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java ...
- Codeforces Gym 100463A Crossings 逆序数
Crossings Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100463 Description ...
- [HDU POJ] 逆序数
HDU 1394 Minimum Inversion Number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/3276 ...
- [HDU] 1394 Minimum Inversion Number [线段树求逆序数]
Minimum Inversion Number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java ...
- hdu 1394 zoj 1484 求旋转序列的逆序数(并归排序)
题意:给出一序列,你可以循环移动它(就是把后面的一段移动到前面),问可以移动的并产生的最小逆序数. 求逆序可以用并归排序,复杂度为O(nlogn),但是如果每移动一次就求一次的话肯定会超时,网上题解都 ...
随机推荐
- Windows下C/C++连接mysql数据库的方法
步骤 安装MySQL数据库 项目属性页->C/C++->常规->附加包含目录:xxx\mysql Server 5.6\include 项目属性页->链接器->常规-&g ...
- 【转】C++函数的重载、覆盖和隐藏区别
网上看到的关于C++函数的重载.覆盖和隐藏区别的回答,如下(其内容来源于C++面试宝典中一道题目): a.成员函数被重载的特征:(1)相同的范围(在同一个类中):(2)函数名字相同:(3)参数不同:( ...
- 熊猫猪新系统測试之二:Mac OS X 10.10 优胜美地
在第一篇windows 10技术预览版測试之后.本猫为大家呈现还有一个刚刚才更新的mac操作系统:"优胜美地".苹果相同一改以猫科动物为代号命名的传统.在10.9的Maverick ...
- USACO castle
<pre name="code" class="cpp"><pre>USER: Kevin Samuel [kevin_s1] TASK ...
- Swift基础一(代码)
import Foundation println("Hello, World!") var string1 = "Hello BeiJing" //定义一个变 ...
- hdu2222--Keywords Search+AC自己主动机模板
题目链接:pid=2222">点击进入 KMP对模式串进行处理.然后就能够方便的推断模式串是否在目标串中出现了:这显示适合一个模式串多个目标串的情况.可是假设模式串有多个,这时假设还用 ...
- C++11,控制台输出的一段小程序。
#include <iostream> // std::cout, std::boolalpha, std::noboolalpha int main () { bool b = true ...
- tcp state
[root@hadoop1 log]# netstatActive Internet connections (w/o servers)Proto Recv-Q Send-Q Local Addres ...
- BootstrapValidator demo
source:http://bv.doc.javake.cn/api/ BootstrapValidator is the best jQuery plugin to validate form fi ...
- tcp与socket关系
套接字(socket)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元.