【洛谷P1966】火柴排队
两列排序后将编号一一对应
归并排序求逆序对
(每一次交换就去掉一个逆序对)
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #define ll long long 5 using namespace std; 6 const int N=100100; 7 const ll P=99999997; 8 ll tmp[N],ss[N],ans,n; 9 struct fx{ 10 ll w; 11 int id; 12 }a[N],b[N]; 13 bool cmp(fx p,fx q){ 14 return p.w<q.w; 15 } 16 ll read(){ 17 ll sum=0; 18 char ch=getchar(); 19 while (ch<'0'||ch>'9') 20 ch=getchar(); 21 while (ch>='0'&&ch<='9'){ 22 sum=sum*10+ch-'0'; 23 ch=getchar(); 24 } 25 return sum; 26 } 27 void mergesort(int l,int r){ 28 if(l==r) 29 return; 30 int m=(l+r)>>1; 31 mergesort(l,m); 32 mergesort(m+1,r); 33 int i=l; 34 int j=m+1; 35 int k=l; 36 while (i<=m&&j<=r){ 37 if (ss[i]<ss[j]){ 38 tmp[k]=ss[i]; 39 i++; 40 k++; 41 } 42 else{ 43 ans=(ans+m-i+1)%P;//区间内逆序对个数 44 tmp[k]=ss[j]; 45 j++; 46 k++; 47 } 48 } 49 while (i<=m){ 50 tmp[k]=ss[i]; 51 k++; 52 i++; 53 } 54 while (j<=r){ 55 tmp[k]=ss[j]; 56 k++; 57 j++; 58 } 59 for (int i=l;i<=r;i++){ 60 ss[i]=tmp[i]; 61 } 62 } 63 int main(){ 64 ans=0; 65 n=read(); 66 for (int i=1;i<=n;i++){ 67 a[i].w=read(); 68 a[i].id=i; 69 } 70 for (int i=1;i<=n;i++){ 71 b[i].w=read(); 72 b[i].id=i; 73 } 74 sort(a+1,a+n+1,cmp); 75 sort(b+1,b+n+1,cmp); 76 for (int i=1;i<=n;i++) 77 ss[a[i].id]=b[i].id; 78 mergesort(1,n); 79 printf("%lld",ans%P); 80 return 0; 81 }
STD
转载于:https://www.cnblogs.com/Absolute-Zero/p/6013878.html
【洛谷P1966】火柴排队相关推荐
- 洛谷 P1966 火柴排队 —— 思路
题目:https://www.luogu.org/problemnew/show/P1966 首先,一个排列相邻交换变成另一个排列的交换次数就是逆序对数: 随便画一画,感觉应该是排个序,大的对应大的, ...
- 洛谷P1966 火柴排队
题目描述 涵涵有两盒火柴,每盒装有 nn 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相同, 两列火柴之间的距离定义为:\sum (a_i-b_i)^2∑(a ...
- 洛谷 P1966 火柴排队【树状数组】
题目描述 涵涵有两盒火柴,每盒装有n 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相同, 两列火柴之间的距离定义为 ∑ni=1(ai−bi)2 ∑ i = 1 ...
- 洛谷 P1966 火柴排队
题意 给定2个等长序列a.b,要求通过交换使 \[\sum_{i=1}^{n}(a_i-b_i)^2\] 最小. 分析 看着这个式子,我突然想到了方差.很明显,方差反应数据的波动程度,所以让数据集中就 ...
- 洛谷P1966 火柴排队(逆序对)
题意 题目链接 Sol 不算很难的一道题 首先要保证权值最小,不难想到一种贪心策略,即把两个序列中rank相同的数放到同一个位置 证明也比较trivial.假设\(A\)中有两个元素\(a, b\), ...
- 洛谷P1966 火柴排队(cdq分治 + 逆序对)
2020.6.8 练二分了当然要练练分治,这些基础的处理手段真的还是蛮好用的. 这道题是问ai 和bi的平方和最小,最少需要的相邻的交换次数.手动模拟了一下感觉没什么思路.但是后来注意到每次只能移动相 ...
- NOIP2013 火柴排队 [洛谷P1966]
NOIP2013 火柴排队 [洛谷P1966] 题目描述 涵涵有两盒火柴,每盒装有 \(n\) 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相同, 两列火柴之 ...
- P1966 火柴排队题解
P1966 火柴排队 题意:有两列火柴,各有各的高度,两两高度不同,每次只能交换相邻的数,问最少交换多少次,使得 ∑ ( a i − b i ) 2 \sum (a_i-b_i)^2 ∑(ai−bi ...
- 洛谷 P1149 火柴棒等式(太suang络吧)
题目描述 给你n根火柴棍,你可以拼出多少个形如"A+B=CA+B=C"的等式?等式中的AA.BB.CC是用火柴棍拼出的整数(若该数非零,则最高位不能是00).用火柴棍拼数字0-90 ...
最新文章
- java应用窗口大小_java 如何让程序窗口随屏幕大小改变 | 学步园
- ## **scrapy+kafka+sparkstream爬取京东Iphone12评论储存数据**
- debian下编译安装poco
- 嵌套中断共享资源问题及解决
- C语言以递归实现归并排序Merge Sort算法(附完整源码)
- 理解云计算备份与灾难恢复
- cobertura覆盖率_Cobertura和Maven:集成和单元测试的代码覆盖率
- centos 安装jdk_centos7配置jdk
- 中props使用this报错_为什么在静态方法中不能使用this
- NUC1214 回文素数
- word 远程过程调用失败。 (异常来自 HRESULT:0x800706BE) 解决方法
- 使用说明_无线投屏器使用说明教程
- 曲面化原理创新设计_女裤制版要多久创新服务
- 自制一个简单的操作系统
- 微软sccm服务器,微软SCCM是什么?
- C. The Intriguing Obsession(神仙组合数)
- nodejs-CentOS64下载安装配置
- 数组测验1 7-5 冒泡法排序 (20 分)
- android水印控件,Android图片添加文字水印并保存水印文字图片到指定文件
- 用python写个根据提示猜词语简单的游戏_python实现简单猜单词游戏
热门文章
- python access_Python3 os.access() 方法
- html文档主体的根标签,2 HTML简介标签嵌套和并列关系文档声明
- 群晖按装mysql_如何连接群晖里的MYSQL数据库
- python web.py 404_找不到web.py开发服务器-favicon.ico-404
- 户籍恢复需要体检吗_脑梗死后脚麻能恢复吗?需要多久能恢复呢?
- 得到前i-1个数中比A[i]小的最大值,使用set,然后二分查找
- 【C++grammar】代理构造、不可变对象、静态成员
- python 初始化 元组_在Python中重新初始化元组
- 09-CNN手写数字识别
- PHP的数据类型、浮点型比较