逆序数 UVALive 6508 Permutation Graphs
题目传送门
1 /* 2 题意:给了两行的数字,相同的数字连线,问中间交点的个数 3 逆序数:第一行保存每个数字的位置,第二行保存该数字在第一行的位置,接下来就是对它求逆序数 4 用归并排序或线段树求。想到了就简单了:) 5 */ 6 #include <cstdio> 7 #include <algorithm> 8 #include <cstring> 9 #include <cmath> 10 #include <vector> 11 using namespace std; 12 13 typedef long long ll; 14 const int MAXN = 1e5 + 10; 15 const int INF = 0x3f3f3f3f; 16 int p[MAXN], a[MAXN]; 17 int L[MAXN/2+10], R[MAXN/2+10]; 18 ll ans; 19 20 void Merge(int *a, int p, int q, int r) 21 { 22 int n1 = q - p + 1, n2 = r - q; 23 for (int i=1; i<=n1; ++i) L[i] = a[p+i-1]; 24 for (int i=1; i<=n2; ++i) R[i] = a[q+i]; 25 L[n1+1] = INF; R[n2+1] = INF; 26 27 int i = 1, j = 1; 28 for (int k=p; k<=r; ++k) 29 { 30 if (L[i] <= R[j]) a[k] = L[i++]; 31 else {a[k] = R[j++]; ans += n1 - i + 1;} 32 } 33 } 34 35 void MergeSort(int *a, int p, int r) 36 { 37 if (p < r) 38 { 39 int q = (p + r) / 2; 40 MergeSort (a, p, q); 41 MergeSort (a, q + 1, r); 42 Merge (a, p, q, r); 43 } 44 } 45 46 int main(void) //UVALive 6508 Permutation Graphs 47 { 48 // freopen ("I.in", "r", stdin); 49 50 int t; scanf ("%d", &t); 51 while (t--) 52 { 53 int n; scanf ("%d", &n); 54 for (int i=1; i<=n; ++i) 55 { 56 int x; scanf ("%d", &x); p[x] = i; 57 } 58 for (int i=1; i<=n; ++i) 59 { 60 int x; scanf ("%d", &x); a[i] = p[x]; 61 } 62 63 ans = 0; 64 MergeSort (a, 1, n); 65 printf ("%lld\n", ans); 66 } 67 68 return 0; 69 }
转载于:https://www.cnblogs.com/Running-Time/p/4597813.html
逆序数 UVALive 6508 Permutation Graphs相关推荐
- UVALive 6508 Permutation Graphs
Permutation Graphs Time Limit: 3000ms Memory Limit: 131072KB This problem will be judged on UVALive. ...
- 逆序数2 HDOJ 1394 Minimum Inversion Number
题目传送门 1 /* 2 求逆序数的四种方法 3 */ 1 /* 2 1. O(n^2) 暴力+递推 法:如果求出第一种情况的逆序列,其他的可以通过递推来搞出来,一开始是t[1],t[2],t[3]. ...
- Codeforces Gym 100463A Crossings 逆序数
Crossings Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100463 Description ...
- HDU 5775 Bubble Sort(归并排序+逆序数)
题目链接:HDU 5775 Bubble Sort ...
- 剑指 offer set 22 数组中的逆序数
总结 1. 题目为归并排序的变形, 不过我完全没想到 2. 在归并排序进行字符组 merge 时, 统计逆序数. merge 后, 两个子数组是有序的了, 下次再 merge 的时候就能以 o(n) ...
- 二叉树:二叉搜索树实现 逆序数问题
关于逆序数的问题描述如下: 已知数组nums,求新数组count,count[i]代表了在nums[i]右侧且比 nums[i]小的元素个数. 例如: nums = [5, 2, 6, 1], cou ...
- 递归/归并:count of smaller numbers求逆序数
已知数组nums,求新数组count,count[i]代表了在nums[i]右侧且比 nums[i]小的元素个数. 例如: nums = [5, 2, 6, 1], count = [2, 1, 1, ...
- 求排列的逆序数(分治)
考虑1,2,-,n (n <= 100000)的排列i1,i2,-,in,如果其中存在j,k,满足 j < k 且 ij > ik, 那么就称(ij,ik)是这个排列的一个逆序. 一 ...
- 算法笔记-归并算法面试题、逆序数问题
1. 题目 逆序对问题:在一个数组中,左边的数如果比右边大,则这两个数构成一个逆序对,请打印所有逆序对 比如说: 数组: 5, 1, 3,4,2 第一个元素是5,其右边有小于5的数,即1,3,4,2, ...
最新文章
- C++知识点52——多重继承
- Vitamio打造自己的Android万能播放器
- 【错误记录】360 加固后的运行错误 ( 加固 SO 动态库时不能对第三方动态库进行加固 )
- 论文笔记:Integrating Classification and Association Rule Mining (即,CBA算法介绍)
- jenkis编译报错:需要class,interface或enum
- 场景/故事/story——寻物者发布消息场景、寻失主发布消息场景、消息展示场景、登录网站场景...
- 测试Live Writer 发表博客
- Android之invalid address or address of corrupt block 0xabb494a0 passed to dlfree崩溃解决办法
- 您应该考虑将应用程序升级到Spring 4的5个理由
- 最简单的jQuery程序
- Codeforces Round #354 (Div. 2) A. Nicholas and Permutation
- (素材源码)猫猫学IOS(十)UI之_NSTimer_ios计时器
- paip.提升性能----SQL优化总结
- mysql 删除表的方法_MySQL 删除表的三种方式
- 【VFB】复制VB代码(VB与FB的差异)(VFB教程3-6)
- LVGL|lvgl中文教程手册(lvgl中文文档学习教程)
- VB制作的“小小莫扎特五线谱助记软件”
- spyder 5.0.0 提示依赖项spyder-kernels版本错误
- 极客日报:微信自动抢红包软件被判赔 475 万;日本科学家打破网速全球纪录;JavaScript蝉联最受欢迎编程语言
- 如何对待新事物_以积极态度看待不断出现的新事物
热门文章
- 26Java中的多态
- python代码编写规范有哪些_Python代码编写规范(适合于小团体,低强度)
- Visual Studio 2015安装教程(附激活码)
- 光流 | 基于Matlab实现Lucas-Kanade方法:方法1(附源代码)
- Spin控件使用总结
- linux 改成utc时间_C++下四种常用的程序运行时间的计时方法总结
- 网络安全等保定级_网络安全防护专项检查迫在眉睫, 青莲帮您快速定级备案和评测...
- 香帅的北大金融学课笔记17 -- 公司治理
- 互联网内容平台到底要用到多少AI技术?
- 【深度学习】近几年,关于基于Imagenet数据集图像分类的模型总结