【归并排序】AcWing. 505 / NOIP2013提高组《火柴排队》(c++)

【题目描述】

涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度。

现在将每盒中的火柴各自排成一列,同一列火柴的高度互不相同,两列火柴之间的距离定义为:

其中 ai  表示第一列火柴中第 i 个火柴的高度,bi 表示第二列火柴中第 i 个火柴的高度。 

每列火柴中相邻两根火柴的位置都可以交换,请你通过交换使得两列火柴之间的距离最小。

请问得到这个最小的距离,最少需要交换多少次?

如果这个数字太大,请输出这个最小交换次数对 99,999,997 取模的结果。

【输入格式】

共三行,第一行包含一个整数 n,表示每盒中火柴的数目。 

第二行有 n 个整数,每两个整数之间用一个空格隔开,表示第一列火柴的高度。

第三行有 n 个整数,每两个整数之间用一个空格隔开,表示第二列火柴的高度。

【输出格式】

输出共一行,包含一个整数,表示最少交换次数对 99,999,997 取模的结果。

【数据范围】

1≤n≤10的5次方,
0≤火柴高度≤2的31次方−1。

【输入样例】

4
2 3 1 4
3 2 1 4

【输出样例】

1

对归并排序不熟悉的可以参考快速排序模板&归并排序模板及对应例题(C++)

【代码】

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

const int N = 100010, MOD = 99999997;

int n;
int a[N], b[N], c[N], p[N];

void work(int a[])
{
    for (int i = 0; i < n; i ++ ) p[i] = i;
    sort(p, p + n, [&](int x, int y) {
        return a[x] < a[y];
    });
    for (int i = 0; i < n; i ++ ) a[p[i]] = i;
}

int merge_sort(int l, int r)
{
    if (l >= r) return 0;
    int mid = l + r >> 1;
    int res = (merge_sort(l, mid) + merge_sort(mid + 1, r)) % MOD;
    int i = l, j = mid + 1, k = 0;
    while (i <= mid && j <= r)
        if (b[i] <= b[j]) p[k ++ ] = b[i ++ ];
        else p[k ++ ] = b[j ++ ], res = (res + mid - i + 1) % MOD;
    while (i <= mid) p[k ++ ] = b[i ++ ];
    while (j <= r) p[k ++ ] = b[j ++ ];
    for (i = l, j = 0; i <= r; i ++, j ++ ) b[i] = p[j];
    return res;
}

int main()
{
    scanf("%d", &n);
    for (int i = 0; i < n; i ++ ) scanf("%d", &a[i]);
    for (int i = 0; i < n; i ++ ) scanf("%d", &b[i]);

    work(a), work(b);
    for (int i = 0; i < n; i ++ ) c[a[i]] = i;
    for (int i = 0; i < n; i ++ ) b[i] = c[b[i]];

    printf("%d\n", merge_sort(0, n - 1));
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/432928.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

gitlab的安装

1、下载rpm 安装包 (1)直接命令下载 wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-11.6.10-ce.0.el7.x86_64.rpm&#xff08;2&#xff09;直接去服务器上下载包 Index of /gitlab-ce/yum/el7/ | 清华大学开源软件镜像站 | Tsinghua Open Source…

基于springboot+vue的政府管理系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

Maya笔记 软选择

文章目录 1什么是软选择2注意3如何打开软选择3.1方法一3.2方法二 4调整软选择的范围5衰减模式5.1体积模式5.2表面模式 6衰减曲线 1什么是软选择 也就是渐变选择&#xff0c;从中心点向外影响力度越来越小 软选择针对的是点线面这些模型元素 下图中展示了对被软选择的区域移动…

禅道软件介绍:开源版(免费)和付费版的区别

禅道免费版是有两个版本其中一个是开源的&#xff0c;另一个是云禅道的5人以下免费版。禅道免费版和付费版的区别在于&#xff1a;禅道免费版虽然提供基础项目管理功能&#xff0c;但也只适合有技术能力自行维护和定制的团队。付费版&#xff08;如企业版、旗舰版&#xff09;则…

在nginx 服务器部署vue项目

以人人快速开发的开源项目&#xff1a;renren-fast-vue 为例 注&#xff1a;这里开始认为各位都会使用nginx 打包vue项目 npm run build 测试打包的项目是否可以运行 serve dist 可以正常运行 编译报错请移步到&#xff1a;renren-fast-vue1.2.2 项目编译报错: build g…

微信公众号公司主体变更怎么办?

公众号迁移的好处有哪些&#xff1f;迁移后原公众号还能用吗&#xff1f;1&#xff09;获得更多权限功能如果公众号是个人主体&#xff0c;想进行认证&#xff0c;拥有更多权限功能。例如菜单栏跳转外部链接&#xff0c;相拥有留言功能&#xff0c;服务号认证获得开发权限等。就…

字节后端实习 一面凉经

心脏和字节永远都在跳动 深圳还有没有大厂招后端日常实习生啊&#xff0c;求捞&#xff5e;&#xff08;boss小公司也不理我&#xff09; 很纠结要不要干脆直接面暑期实习&#xff0c;又怕因为没有后端实习经历&#xff0c;面不到大厂实习。死锁了

java算法第十五天 | ● 层序遍历 ● 226.翻转二叉树 ● 101.对称二叉树

层序遍历 思路&#xff1a; 需要借用一个辅助数据结构即队列来实现&#xff0c;队列先进先出&#xff0c;符合一层一层遍历的逻辑&#xff0c;而用栈先进后出适合模拟深度优先遍历也就是递归的逻辑。 而这种层序遍历方式就是图论中的广度优先遍历&#xff0c;只不过我们应用在…

智能AI数字人直播源码系统 帮你打造24不间断直播间 带完整的搭建教程

在数字化时代&#xff0c;直播已成为企业与个人展示自我、传递信息的重要渠道。然而&#xff0c;传统直播方式受限于时间、人力等因素&#xff0c;难以实现全天候的直播服务。下面&#xff0c;小编给大家介绍一款智能AI数字人直播源码系统&#xff0c;帮助用户轻松打造24小时不…

STM32的RCC原理(复位和时钟控制)

基本概念 STM32微控制器的RCC&#xff08;Reset and Clock Control&#xff09;模块是一个非常重要的部分&#xff0c;它负责管理微控制器的时钟系统和复位系统。以下是一些基本的原理和概念&#xff1a; 时钟源&#xff1a;STM32微控制器的时钟系统有多个时钟源&#xff0c;包…

【人工智能课程】计算机科学博士作业三

【人工智能课程】计算机科学博士作业三 来源&#xff1a;李宏毅2022课程第10课的作业 1 图片攻击概念 图片攻击是指故意对数字图像进行修改&#xff0c;以使机器学习模型产生错误的输出或者产生预期之外的结果。这种攻击是通过将微小的、通常对人类难以察觉的扰动应用于输入…

使用 Docker 部署 File Browser 文件管理系统

1&#xff09;File Browser 介绍 官网&#xff1a;https://filebrowser.org/ GitHub&#xff1a;https://github.com/filebrowser/filebrowser 今天为大家分享一款开源的私有云盘项目&#xff1a;File Browser&#xff0c;简单实用、轻量级、跨平台&#xff0c;安装部署简单快…

Day 6.有名信号量(信号灯)、网络的相关概念和发端

有名信号量 1.创建&#xff1a; semget int semget(key_t key, int nsems, int semflg); 功能&#xff1a;创建一组信号量 参数&#xff1a;key&#xff1a;IPC对像的名字 nsems&#xff1a;信号量的数量 semflg&#xff1a;IPC_CREAT 返回值&#xff1a;成功返回信号量ID…

职场中的团队合作:如何建立高效的团队协作

在职场中&#xff0c;团队合作是至关重要的。一个高效的团队可以协同工作&#xff0c;共同实现目标&#xff0c;提高工作效率&#xff0c;创造出卓越的成果。然而&#xff0c;建立一个高效的团队并不容易&#xff0c;需要团队成员之间的良好沟通、相互信任和合作。本文将分享一…

Java核心技术卷1——运算符 每日笔记

3.5 运算符 运算符用于连接值。 3.5.1算数运算符 在Java中&#xff0c;使用算术运算符、-、*、/表示加、减、乘、除运算。 当参与/运算的两个操作数都是整数时&#xff0c;表示整数除法&#xff1b; 否则表示浮点数除法。 整数的求余&#xff08;取模&#xff09;操作用%表示…

Laravel Octane 和 Swoole 协程的使用分析二

又仔细研究了下 Octane 源码和 Swoole 的文档&#xff0c;关于前几天 Laravel Octane 和 Swoole 协程的使用分析中的猜想&#xff0c;得到进一步验证&#xff1a; Swoole 的 HTTP Server 启动后会创建一个 master 进程和一个 manager 进程&#xff1b;master 进程又会创建多个…

《UE5_C++多人TPS完整教程》学习笔记26 ——《P27 在线会话测试(Testing An Online Session)》

本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P27 在线会话测试&#xff08;Testing An Online Session&#xff09;》 的学习笔记&#xff0c;该系列教学视频为 Udemy 课程 《Unreal Engine 5 C Multiplayer Shooter》 的中文字幕翻译版&#xff0c;UP主&#xff0…

山海鲸可视化软件实战:如何制作一个高效的商品销售数据看板

作为一名数据分析师&#xff0c;我经常需要通过各种工具将数据转化为有价值的信息&#xff0c;为公司的决策提供支持。最近&#xff0c;我使用山海鲸可视化软件制作了一个商品销售数据看板&#xff0c;山海鲸可视化是一款可以免费可视化编辑、免费私有化部署的产品。下面&#…

6_怎么看原理图之协议类接口之LCD笔记

首先想一想再前几篇文章讲的协议类的前提 1、双方约定好通信的协议 2、双方满足一定的时序要求 以上第二点又有一些要求&#xff1a; 1&#xff09;弄清2440在这个通信协议中&#xff0c;能设置哪些时序的值&#xff0c;这些值的含义是什么——2440手册 2&#xff09;弄清楚这…

一文详解:Open SSL

Open SSL是 SSL (传输层安全)和 TLS (传输层安全)协议的健壮的开源实现。这些加密协议被广泛用于保护计算机网络上的通信&#xff0c;通过在两个通信应用程序之间提供隐私和数据完整性。从更实际的角度来说&#xff0c;OpenSSL 是一个工具包&#xff0c;其中包含各种命令行实用…