逆序对 -- cogs1438 火柴排队
题目链接:http://cogs.pro:8081/cogs/problem/problem.php?pid=vimiQkqjU
【题目描述】



样例一输入:
4
2 3 1 4
3 2 1 4
样例二输入:
4
1 3 4 2
1 7 2 4
思路:对于两盒火柴,最小距离∑(1≤i≤n)(ai - bi)2 可推出只与ai*bi有关,又可知顺序的值大于等于乱序的值,因此只需要将A与B的顺序做成一样的即可,第一想法是考虑升序 或者降序,但是要求交换次数最小,则可取其中一个不动,另外一个的相对顺序变成一样的即可,代码中a[i]表示b的位置,i表示a的第i个元素,则只需要把a进行逆序对统计即可。
代码如下:
#include "iostream"
#include "cstdio"
#include "algorithm"
#define maxn 100100
#define ll long long
using namespace std; struct stick
{
int length, id;
bool operator < (const stick& a)const
{
return length < a.length;
}
}s[maxn], d[maxn]; ll temp[maxn], n, a[maxn];
ll sum = ; void merge(ll b[], ll l, ll r)
{
for (int i = l; i <= r; i++)
{
temp[i] = b[i];
}
int mid = (l + r) >> ;
int i = l, j = mid + ;
for (int pos = l; pos <= r; pos++)
{
if (i == mid + )
{
a[pos] = temp[j];
j++;
}
else if (j == r + )
{
a[pos] = temp[i];
i++;
}
else if (temp[i] > temp[j])
{
a[pos] = temp[j];
j++;
sum += mid - i + ;
sum %= ;
}
else
{
a[pos] = temp[i];
i++;
}
}
} void msort(ll b[], ll l, ll r)
{
if (l == r)
return;
int mid = (l + r) >> ;
msort(b, l, mid);
msort(b, mid + , r);
merge(b, l, r);
} int main()
{
freopen("MatchNOIP2013.in", "r", stdin);
freopen("MatchNOIP2013.out", "w", stdout);
cin >> n;
for (int i = ; i < n; i++)
{
cin >> s[i].length;
s[i].id = i;
}
for (int i = ; i < n; i++)
{
cin >> d[i].length;
d[i].id = i;
}
sort(s, s + n);
sort(d, d + n);//排序后方便将id离散化
for (int i = ; i < n; i++)
{
a[s[i].id] = d[i].id;
}
msort(a, , n - );
cout << sum % << endl;
return ;
}
逆序对 -- cogs1438 火柴排队的更多相关文章
- [树状数组+逆序对][NOIP2013]火柴排队
火柴排队 题目描述 涵涵有两盒火柴,每盒装有n根火柴,每根火柴都有一个高度.现在将每盒中的火柴各自排成一列,同一列火柴的高度互不相同,两列火柴之间的距离定义为:∑ (ai-bi)2,i=1,2,3,. ...
- Codevs 3286 火柴排队 2013年NOIP全国联赛提高组 树状数组,逆序对
题目:http://codevs.cn/problem/3286/ 3286 火柴排队 2013年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : ...
- [NOIP2013提高&洛谷P1966]火柴排队 题解(树状数组求逆序对)
[NOIP2013提高&洛谷P1966]火柴排队 Description 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相 ...
- luogu P1966 火柴排队 (逆序对)
luogu P1966 火柴排队 题目链接:https://www.luogu.org/problemnew/show/P1966 显然贪心的想,排名一样的数相减是最优的. 证明也很简单. 此处就不证 ...
- NOIP 2013 T2 火柴排队 ---->求逆序对
[NOIP2013T2]火柴排队 背景 noip2013day1 描述 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各 自 排成一列, 同一列火柴的高度互不相同, ...
- P1966 火柴排队——逆序对(归并,树状数组)
P1966 火柴排队 很好的逆序对板子题: 求的是(x1-x2)*(x1-x2)的最小值: x1*x1+x2*x2-2*x1*x2 让x1*x2最大即可: 可以证明将b,c数组排序后,一一对应的状态是 ...
- NOIP2013火柴排队[逆序对]
题目描述 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相同, 两列火柴之间的距离定义为: ∑(ai-bi)^2 其中 ai 表示 ...
- NOIP 2013 提高组 day1 T2 火柴排队 归并 逆序对
描述 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度.现在将每盒中的火柴各自排成一列,同一列火柴的高度互不相同,两列火柴之间的距离定义为:∑i=1n(ai−bi)2∑i=1n(ai−bi) ...
- 【题解】洛谷P1966 [NOIP2013TG] 火柴排队(树状数组+逆序对)
次元传送门:洛谷P1966 思路 显然在两排中 每排第i小的分别对应就可取得最小值(对此不给予证明懒) 所以我们只在意两排的火柴是第几根 高度只需要用来进行排序(先把两个序列改成有序的方便离散化) 因 ...
随机推荐
- SpringBoot统一异常处理后TX-LCN分布式事务无法捕获异常进行回滚
通常我们使用SpringBoot都会进行统一异常处理,例如写一个BaseController,在BaseController里进行统一异常处理,然后其他的Controller都继承BaseContro ...
- Centos7静态ip设置(亲测有效)
本文引自:https://www.cnblogs.com/toov5/p/10340395.html,特此鸣谢 最近想测试消息中间件等各类web集群相关技术,这就需要解决linux主机之间互联互通的若 ...
- Web上传大文件的解决方案
需求:项目要支持大文件上传功能,经过讨论,初步将文件上传大小控制在500M内,因此自己需要在项目中进行文件上传部分的调整和配置,自己将大小都以501M来进行限制. 第一步: 前端修改 由于项目使用的是 ...
- git避免提交本地配置文件-来自同事的分享
在项目协作中,对于已经更改的文件,不同的开发者常常需要根据自己的需要对文件进行更改已满足本地开发环境的需求(这种情况很常见,一般是对项目相关的配置项的更改,对业务逻辑代码的更改一般都是正常的协作编码过 ...
- Python数据挖掘-文本挖掘
文本挖掘概要 搞什么的? 从大量文本数据中,抽取出有价值的知识,并且利用这些知识更好的组织信息的过程. 目的是什么? 把文本信息转化为人们可利用的知识. 举例来说,下面的图表利用文本挖掘技术对库克ip ...
- 修改tomcat控制台的标题
Tomcat的bin目录下,创建一个名为setenv.bat的文件. setenv.bat 编辑内容 : set TITLE = 想要命名的标题名称 保存修改.重新启动. 第二种. 修改tomca ...
- echarts中国地图3D各个城市标点demo
<!DOCTYPE html><html><head> <meta charset="UTF-8"> <meta ...
- ios-Realm数据库的使用
[集成 Realm] 本 Demo 使用 OC 创建,所以先进入 Realm 官网 (我记得之前都是有官方中文教程的,但现在最新版没有中文了),到 Objective-C -> Getting ...
- linux下如何基于已有容器创建image并运行?
1. 通过docker ps命令先找到容器id,示例如下,123456789012就是我们要找的 jello@~$ docker ps CONTAINER ID IMAGE COMMAND CREAT ...
- ubuntu下如何使用apt-get安装arm64的交叉编译工具链?
答: sudo apt-get install gcc-aarch64-linux-gnu -y