B. Minimize Inversions

给你两个长度为 n 的排列 a 和 b 。一个排列是由从 1 到 n 的 n 个元素组成的数组,其中所有元素都是不同的。例如,数组 [2,1,3] 是一个排列,但是 [0,1] 和 [1,3,1] 不是。
你可以(随心所欲地)选择两个索引 i 和 j ,然后同时把 ai 和 aj 以及 bi 和 bj 互换。
你讨厌倒置,所以你想尽量减少两次排列中倒置的总数。
排列组合 p 中的倒置是指一对索引 (i,j),即 i<j 和 pi>pj 。例如,如果有 p=[3,1,4,2,5] ,那么其中就有 3 个反转数(这对索引分别是 (1,2)、(1,4) 和 (3,4))。

输入
第一行包含一个整数 t (1 ≤ t ≤ 20000) - 测试用例的数量。
每个测试用例由三行组成。
第一行包含一个整数 n (1 ≤ n ≤ 2e5) - 排列 a 和 b 的长度。
第二行包含  n 个整数 a1,a2,…,an (1 ≤ ai ≤ n)--排列组合 a 和 b 的长度。
第三行包含格式类似的 b 。
保证所有测试用例中 n 的总和不超过 2e5。

输出

对于每个测试用例,输出两个排列 a′ 和 b′ (格式与输入相同)--所有操作后的排列。
 a′ 和 b′ 中的反转总数应该是使用语句中的操作可以得到的所有排列对中的最小值。
如果有多个解,请打印其中任意一个。

Input
3
5
1 2 3 4 5
5 4 3 2 1
3
3 1 2
3 1 2
6
2 5 6 1 3 4
1 5 3 6 2 4

Output
3 2 5 1 4
3 4 1 5 2
1 2 3
1 2 3
2 3 4 6 5 1
1 2 4 3 5 6


在第一个测试案例中,可能的最小反转次数为 10 。
在第二个测试案例中,我们可以同时对两种排列进行排序。为此,可以进行以下操作:
交换两种排列中位于 1 和 3 位置的元素。操作后, a= [ 2,1,3 ] ,b= [ 2,1,3 ];交换位置 1 和 2 中的元素。
在第三个测试案例中,可能的最小反转数是 7 。

解析:
对于 a[i],a[j],b[i],b[j] ,其中i<j,一共4种情况。
1. a[i] > a[j] 且 b[i] > b[j],通过交换顺序可以将逆序对的个数减少 2 个;
2. a[i] > a[j] 且 b[i] < b[j],交换顺序,不改变逆序对的个数,一减一增;
3. a[i] < a[j] 且 b[i] > b[j],交换顺序,不改变逆序对的个数,一增一减;
4. a[i] < a[j] 且 b[i] < b[j],不需要交换。

可以看出,对于 2,3 和 4 的情况就不需要考虑。
对于 1 的情况,对一个序列进行升序排列即可,这样就能使得逆序对的个数最小。

#include <bits/stdc++.h>
#include <math.h>
using namespace std;
#define int long long
#define endl '\n'
#define ios ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr);
int gcd(int a,int b) { return b? gcd(b,a%b) : a; }
typedef pair<int,int> PII;
const double PI=acos(-1.0);
const int N=2e6+10;
int n;
struct node
{int a,b;
}str[N];
bool cmp(node x,node y)
{return x.a<y.a;
}
void solve()
{cin>>n;for (int i=0;i<n;i++) cin>>str[i].a;for (int i=0;i<n;i++) cin>>str[i].b;sort (str,str+n,cmp);for (int i=0;i<n;i++) cout<<str[i].a<<" ";cout<<endl;for (int i=0;i<n;i++) cout<<str[i].b<<" ";cout<<endl;
}
signed main()
{ios;int T=1;cin>>T;while (T--) solve(); return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录算法训练营第三十三天|509. 斐波那契数 ,● 70. 爬楼梯 , 746. 使用最小花费爬楼梯

确定dp数组&#xff08;dp table&#xff09;以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组 代码随想录 视频&#xff1a;从此再也不怕动态规划了&#xff0c;动态规划解题方法论大曝光 &#xff01;| 理论基础 |力扣刷题总结| 动态规划入门_哔哩哔哩…

串口通讯(串行接口通讯)

文章目录 一、串行通讯是什么&#xff1f;二、种类三、并行与串行的区别四、通信方式总结 一、串行通讯是什么&#xff1f; 串行通讯是通信双方按位进行&#xff0c;遵守时序的一种通信方式。 串行通信中&#xff0c;将数据按位依次传输&#xff0c; 每位数据占据固定的时间长…

计算机图形学 实验

题目要求 1.1 实验一&#xff1a;图元的生成&#xff1a;直线、圆椭区域填充 你需要完成基本的图元生成算法&#xff0c;包括直线和椭圆。 在区域填充中&#xff0c;要求你对一个封闭图形进行填充。你需要绘制一个封 闭图形&#xff08;例如多边形&#xff09;&#xff0c;并选…

2024美赛数学建模问题A题思路模型分析 ——资源可用性和性别比例

虽然有些动物物种不存在通常的雄性或雌性&#xff0c;但大多数物种基本上都是雄性或雌性。虽然许多物种在出生时的性别比例为 1:1&#xff0c;但其他物种的性别比例却偏离了平均值。这就是所谓的适应性性别例变异。例如&#xff0c;美洲鳄孵卵巢的温度会影响其出生时的性别比例…

Hadoop3.x基础(3)- MapReduce

来源: B站尚硅谷 目录 MapReduce概述MapReduce定义MapReduce优缺点优点缺点 MapReduce核心思想MapReduce进程常用数据序列化类型MapReduce编程规范WordCount案例实操本地测试提交到集群测试 Hadoop序列化序列化概述自定义bean对象实现序列化接口&#xff08;Writable&#xff…

新手不会Git也能玩Github吗?

新手不会Git也能玩Github吗&#xff1f; 前言使用Github的准备步骤使用一种访问外网资源的方法&#xff08;这一步才是新手最容易&#xff09;注册账号 创建一个自己的仓库创建完仓库后的界面 搜索你想要的代码类型以搜索坦克大战为例以下载烟花代码为例 总结 前言 说到Github&…

人工智能福利站,初识人工智能,机器学习,第四课

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

程序小问-优先定义属性 而不是直接使用变量的主要原因?

在程序设计中&#xff0c;特别是在面向对象编程&#xff08;OOP&#xff09;中&#xff0c;定义属性&#xff08;也称为成员变量或实例变量&#xff09;而不是直接使用变量的主要原因有以下几点&#xff1a; **1 封装&#xff1a;**封装是面向对象编程的四大基本特性之一。通过…

SpringBoot实现轻量级接口反向代理、转发

目录 1、基本的对象1.1 配置类1.2 实体DTO1.3 路由代理拓展器1.4 请求对象 RestTemplate 2、核心转发代码3、暴露接口4、基础配置 前言&#xff1a;想实现一个轻量级的接口反向代理和转发的一个接口服务&#xff0c;可以通过这个服务做一些需要认证才能访问的接口给到前端使用&…

如何使用 Gzip 和 NGINX 来减小 Odoo 网站和后端的页面大小

Odoo 是现代最杰出、最可靠的 ERP 解决方案之一。它配备了广泛的功能和强大的社区。与其他 ERP 解决方案相比&#xff0c;Odoo 的最大优势之一是它配备了内置网站和电子商务解决方案&#xff0c;易于设置和部署。将所有会计、库存和订阅功能与网站集成&#xff0c;使 Odoo 不仅…

listagg、xmlagg、group_concat()函数用法

三种聚合函数 listagg函数XMLAGG函数GROUP_CONCAT()函数 listagg函数 listagg 是oracle数据库中的函数&#xff0c;可以使用指定连接符将字符串连接。 如有表 AREAS&#xff1a; CREATE TABLE AREAS (AREA_CODE VARCHAR(32) NULL COMMENT 地区编码,AREA_NAME VARCHAR(32) NUL…

我已经入驻多多

我已经入驻多多面包多平台 啦! 作为一位专注于帮助人们部署Python环境、探索人工智能和JavaEE技术&#xff0c;并创作计算机课程设计相关作品的创作者。我的作品类型涵盖了各种技术领域&#xff0c;旨在为学习者提供实用的资源和指导。 在CSDN拥有1100个粉丝的基础上&#x…

Spring源码研究导航

前言 这是我拜读源码的成果&#xff0c;大家好好珍惜&#xff0c;未来会有更多的更新。 目录 Spring的事件监听机制 BeanFactory创建过程&#xff08;基于Servlet&#xff09;

【学习心得】Django框架自带的密码加解密方法

一、前端代码 &#xff08;1&#xff09;保存原始密码&#xff08;以学生注册为例&#xff09; <form action"{% url student:register %}" method"post" id"form" >{% csrf_token %}<input type"text" name"stu_name…

arcgis javascript api4.x加载非公开或者私有的arcgis地图服务

需求&#xff1a; 加载arcgis没有公开或者私有的地图服务&#xff0c;同时还想实现加载时不弹出登录窗口 提示&#xff1a;​ 下述是针对独立的arcgis server&#xff0c;没有portal的应用场景&#xff1b; 如果有portal可以参考链接&#xff1a;https://mp.weixin.qq.com/s/W…

Spark streaming写入delta数据湖问题

问题1 一个batch运行时间过长 检查发现问题出现在merge写文件时间过长&#xff0c;一个batch本来应该是控制在1min。但项目上线到生产环境&#xff0c;检查spark streaming的job&#xff0c;发现数据在merge写入到数据湖时&#xff0c;往往超过1小时。继续排查&#xff0c;发现…

php工厂模式

在PHP中&#xff0c;工厂模式是一种创建型设计模式&#xff0c;用于将对象的创建过程封装到一个单独的类&#xff08;即工厂类&#xff09;中。通过使用工厂模式&#xff0c;客户端代码不需要知道如何实例化具体的产品类&#xff0c;而是直接与抽象接口或工厂进行交互&#xff…

MapStruct 使用

MapStruct最详细的使用教程&#xff0c;别在用BeanUtils.copyProperties () mapstruct使用和详解 项目背景 之前查看网上别人写的文章&#xff0c;很多都提到了BeanUtils(org.springframework.beans) 利用反射性能比较差。大家都推荐使用 MapStruct。因为这个组件使用 Java 原…

zookeeper 应该这样学

ZooKeeper 是一个分布式的&#xff0c;开放源码的分布式应用程序协调服务&#xff0c;是 Google 的 Chubby 一个开源的实现&#xff0c;是 Hadoop 和 Hbase 的重要组件。它是一个为分布式应用提供一致性服务的软件&#xff0c;提供的功能包括&#xff1a;配置维护、域名服务、分…

C# 使用 MailKit 接收邮件(附demo)

C# 使用 MailKit 接收邮件&#xff08;附demo&#xff09; 介绍安装包&#xff08;依赖&#xff09;案例简单代码 获取附件核心代码完整代码 介绍一下POP3 介绍 MailKit 是一个开源的 C# 邮件处理库&#xff0c;用于在应用程序中发送和接收电子邮件。它提供了一个强大且易于使…