数列排序——模拟

给定一个数列 a,这个数列满足ai != aj(i != j),现在要求你把这个数列从小到大排序,每次允许你交换其中任意一对数,请问最少需要几次交换?

输入
第一行是一个整数,代表数字个数n(1 ≤ n ≤ 1e5).
第二行有n个整数用空格分隔开,表示数列a(−2e31< ai <2e31−1).

输出
只有一行,包含一个数,表示最少的交换次数。

Input
8
8 23 4 16 77 -5 53 100
Output
5
解析:
快排后的位置应该是每个数的最终位置,也就是说如果一个数移动到相应的位置后,就不用动了,这样的交换应该就是交换次数最少的。
如样例产生的效果:
8 23 4 16 77 -5 53 100
-5 23 4 16 77 8 53 100
-5 4 23 16 77 8 53 100
-5 4 8 16 77 23 53 100
-5 4 8 16 77 23 53 100
-5 4 8 16 23 77 53 100
-5 4 8 16 23 53 77 100
-5 4 8 16 23 53 77 100
-5 4 8 16 23 53 77 100

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
#define ios ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
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;
struct node
{int x,id;
}str[N];
bool cmp(node a,node b)
{return a.x<b.x;
}
int a[N];
int n;
void solve()
{cin>>n;for (int i=1;i<=n;i++){cin>>a[i];str[i]={a[i],i};}sort (str+1,str+n+1,cmp);int ans=0;for (int i=1;i<=n;i++){if (a[i]!=str[i].x){ans++;int t=a[i];swap(a[i],a[str[i].id]);        //交换两个数的位置int l=i+1,r=n;while (l<r){int mid=l+r>>1;if (str[mid].x>=t) r=mid;else l=mid+1;}str[l].id=str[i].id;            //相应的更新数a[i]的位置,由原来的str[l].id变成了str[i].id}}cout<<ans;
}
signed main()
{ios;int T=1;//cin>>T;while (T--) solve(); return 0;
}

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

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

相关文章

reset.css重置样式

reset.css 是重置样式表&#xff0c;统一各浏览器的基础样式&#xff0c;下面列出几个常见的 reset文件&#xff0c;常放在公共样式表中引用 淘宝的reset blockquote,body,button,dd,dl,dt,fieldset,form,h1,h2,h3,h4,h5,h6,hr,input,legend,li,ol,p,pre,td,textarea,th,ul {m…

STL第三讲

第三讲 stl六大部件&#xff1a;算法是函数模板&#xff0c;其他的是类模板 算法形式&#xff1a;传入两个迭代器&#xff08;第三个参数可能有&#xff1a;一个比较的准则 算法需要的所有信息从迭代器获取 迭代器分类 基于红黑树的结构是双向迭代器&#xff1b; 基于hash的取…

【计算机网络】UDP协议与TCP协议

文章目录 一、端口号1.什么是端口号2.端口号范围划分3.认识知名端口号(Well-Know Port Number)4.netstat5.pidof 二、UDP协议1.UDP协议端格式2.UDP的特点3.面向数据报4.UDP的缓冲区5.UDP使用注意事项6.基于UDP的应用层协议 三、TCP协议1.TCP协议段格式1.1理解封装解包和分用1.2…

python蓝桥杯备考——常见切片操作

python蓝桥杯备考——常见切片操作 1、常见切片操作2、练习 1、常见切片操作 当我们使用切片操作时&#xff0c;我们可以从一个序列&#xff08;如字符串、列表或元组&#xff09;中选择一个子序列。 切片操作的一般语法是 sequence[start:stop:step]&#xff0c;其中&#x…

进程通信与socket编程实践之猜数字小游戏

socket是实现进程通信的一种重要方式&#xff0c;本文将通过socket编程实现服务器进程与客户端进程之间的通信&#xff0c;并在通信之外实现猜数字的小游戏。 1. 设计思路 本文设计的C/S结构的猜数字游戏功能如下&#xff1a;服务器端自动生成一个1-100之间的随机数字&#x…

100T数据存进服务器分几步?

大家好&#xff0c;我是豆小匠。 这期来聊聊数据存储相关的问题&#xff0c;包括&#xff1a; 容量评估。技术选型。容灾处理。 另外&#xff0c;文末赠送免费定制红包封面哦&#xff01; 1. 容量评估 通过对容量&性能的评估&#xff0c;可以把业务需求转化成技术语言描…

python3-cookbook-保留最后 N 个元素

第一章&#xff1a;数据结构和算法 Python 提供了大量的内置数据结构&#xff0c;包括列表&#xff0c;集合以及字典。大多数情况下使用这些数据结构是很简单的。但是&#xff0c;我们也会经常碰到到诸如查询&#xff0c;排序和过滤等等这些普遍存在的问题。 因此&#xff0c;这…

鲲鹏微认证——openEuler开源操作系统迁移实践

文章目录 为什么要系统搬迁为什么选择欧拉欧拉系统迁移概述实施路径工具实战 为什么要系统搬迁 2020年12月&#xff0c;CentOs作为由开源社区免费提供的操作系统&#xff0c;宣布将对CentO58于2021年底停止服务&#xff0c;CentO57则于2024年6月底停止服务。 这将直接导致操作…

设计一个停车场

约束和假设 我们应该支持哪种类型的车辆&#xff1f; motorcycle, Car, Bus 每种车型占用的停车位数量是否不同&#xff1f; YesMotorcycle spot -> MotorcycleCompact spot -> Motorcycle, CarLarge spot -> Motorcycle, CarBus can park if we have 5 consecutive …

Linux系统SSH远程管理服务

目录 一、SSH服务介绍 1、SSH协议是什么&#xff1f; 2、SSH的优点 3、SSH的客户端与服务端 4、SSH的原理 4.1 公钥首次连接原理 4.2 ssh加密通讯原理 4.2.1 对称加密 4.2.2 非对称加密 4.2 ssh远程登录 二、服务端配置 1、常见配置项 1.1 修改默认端口 1.2 禁止…

未来已来:AI引领智能时代的多领域巨变

大家好&#xff0c;今天我们将深入探讨人工智能如何彻底改变我们的生活方式&#xff0c;领略未来的无限可能性。 1. 医疗革新&#xff1a;AI担任超级医生 医疗领域是AI最引人注目的战场之一。智能医学影像诊断系统&#xff0c;不仅能够精准识别病变&#xff0c;还能辅助医生提…

VS Code使用Git管理开发项目流程

以VSCode远程连接虚拟机开发为例&#xff0c;已经配置好SSH 在Github上搜索心仪的项目&#xff0c;比如权限管理 点击fork到自己账户仓库 虚拟机下创建一个目录 1)mkdir java_test 2)切换到java_test 初始化并克隆项目 1&#xff09; git init:初始化仓库 2&#xff09; g…

node淘宝新镜像地址

最新的配置淘宝镜像的淘宝官方提供的方法 npm config set registry https://registry.npmmirror.com如果你想将npm的下载源恢复为默认的官方源&#xff0c;可以使用以下命令&#xff1a; npm config set registry https://registry.npmjs.org你可以使用以下命令来查看当前npm…

掼蛋功能之识别性格篇

常说&#xff1a;千人千面。大多数人一到牌局的场面&#xff0c;往往精神便会放松&#xff0c;面貌神情不再收敛&#xff0c;一言一行体现出的性格暴露无疑&#xff0c;具体表现为以下几种&#xff1a; 1、浮躁冲动型&#xff1a;此类人多数不讲究团队配合&#xff0c;自顾自出…

UE5 - Polycam扫描文件导入插件

Polycam是利用Gaussian Splatting进行3D重建的3D扫描相关软件&#xff0c;其对应有UE引擎的插件&#xff08;Plugin_XV3dGS&#xff09;可以把相关格式的文件导入到引擎&#xff1b; 首先Polycam的官网为&#xff1a;My Captures | Polycam 可以下载各种用户扫描文件&#xff…

vivado I/O和时钟规划设计流程步骤

I/O和时钟规划设计流程步骤 下图显示了左侧的项目设计流程步骤。水平箭头表示项目设计流程中可以执行I/O和时钟规划的点。中的步骤I/O和时钟规划设计流程如右图所示。 项目设计流程从一个空的I/O规划项目、RTL设计项目或合成后网表项目。使用这些项目类型中的任何一种&#xf…

PPO学习

openai用tf实现的真的看不懂&#xff0c;大佬的世界… PPO的详细细节 1. 奖励模型和策略的价值头将 query 和 response 的连接作为输入 奖励模型和策略的价值头 不 仅仅查看响应。相反&#xff0c;它将 query 和 response 连接在一起&#xff0c;作为 query_response def ge…

Python进阶知识:整理6 -> 正则表达式

1 基础匹配用法 # 演示Python中正则表达式re模块的3个基础匹配方法 import re # 1. match()方法 从头匹配 string "hello world" result re.match("hello", string) # 如果头部没有匹配成功就直接失败了,后面就不会继续匹配了 print(result) print(r…

设计模式: 装饰模式

文章目录 一、什么是装饰模式二、装饰模式的结构三、使用场景案例分析 一、什么是装饰模式 在不改变对象原有行为的基础上&#xff0c;动态的来为该对象绑定新的行为。 二、装饰模式的结构 装饰模式结构中主要包含如下角色&#xff1a; Component&#xff08;抽象部件&…

卸载 MariaDB:

如果你想将 MariaDB 5.5.68 替换为 MySQL 8&#xff0c;请按照以下步骤操作。在执行这些步骤之前&#xff0c;请确保你已经备份了所有重要的数据库和数据&#xff0c;以防发生意外情况。 1. 卸载 MariaDB&#xff1a; 使用适合你系统的包管理器卸载 MariaDB。在 CentOS/RHEL …