23 LCA模拟赛2T2 异或排列 题解

news/2025/10/9 20:52:49/文章来源:https://www.cnblogs.com/michaele/p/19131958

Fast XORting

题面

给定一个 \(2\) 的整数次幂 \(n\) 以及一个 \(0 \sim n - 1\) 的排列 \(a_1, a_2, \cdots a_n\)

在一次运算中,你可以进行以下两种操作之一:

  • 交换两个相邻元素
  • 选择任意整数 \(0 \le x \le n - 1\) ,将每个 \(a_i\) 都替换为 \(a_i \oplus x\)

求将该排列从小到大进行排序的最小运算次数。

\(1 \le n \le 2^{18}\)

题解

首先观察题目操作的性质,不难发现,第一个操作相当于在求逆序对数,第二个操作至多只会进行一次。

朴素的想法是枚举每个 \(x\) ,异或后跑一遍归并排序,时间复杂度 \(O(n^2 \log n)\)

我们要求逆序数实际上就是要比较两个数的大小关系。那么对于任意的两个数,它们的大小关系只会由从高到低第一个不同的二进制位决定,所以我们可以分开考虑每个二进制位。

对于每个二进制位,我们尝试异或后的逆序数少还是异或前的逆序数少,从而得到一个最优的 \(x\) 使得逆序数最少。

时间复杂度 \(O(n \log^2 n)\)

code

#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>using namespace std;namespace michaele {typedef long long ll;const int N = 262200;int n, m;int a[N], b[N], c[N];ll res;// 归并排序求逆序对数void work (int l, int r) {if (l == r) return;int mid = (l + r) >> 1;work (l, mid);work (mid + 1, r);{int i = l, j = mid + 1, k = l;while (i <= mid && j <= r) {if (b[j] < b[i]) {res += mid - i + 1;c[k ++ ] = b[j ++];} else {c[k ++ ] = b[i ++];}}while (i <= mid) c[k ++] = b[i ++];while (j <= r) c[k ++] = b[j ++];}for (int i = l; i <= r; i ++) {b[i] = c[i];}}void solve () {cin >> m;n = __lg(m);for (int i = 0; i < m; i ++) {cin >> a[i];}res = 0;memcpy (b, a, sizeof a);work (0, m - 1);ll ans = res;int x = 0;for (int i = 0; i < n; i ++) {memcpy (b, a, sizeof a);for (int j = 0; j < m; j ++) {b[j] ^= (1 << i);}res = 0;work (0, m - 1);if (res < ans) x ^= (1 << i);}memcpy (b, a, sizeof a);for (int j = 0; j < m; j ++) {b[j] ^= x;}res = 0;work (0, m - 1);ans = min (ans, res + 1);cout << ans << endl;}
}int main () {ios :: sync_with_stdio (0);cin.tie (0);cout.tie (0);michaele :: solve ();return 0;
}

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

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

相关文章

SQLAlchemy 库 - 实践

SQLAlchemy 库 - 实践2025-10-09 20:49 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-…

Bugkuctf的哥哥的秘密

描述: 哥哥的秘密都藏在妹妹的空间里了 这是妹妹的QQ:2492853776 去找找哥哥藏起来的旗帜吧 构造:http://user.qzone.qq.com/QQ号码/infocenter?via=toolbar https://user.qzone.qq.com/2492853776hint1:解题流程为…

国庆做题记录(基础算法)

这篇文章信息量偏大,请谨慎阅读,注意高效利用右边的目录。 其他部分咕咕咕地更新中……敬请期待 1.1 二分 & 双指针 关联博文:Atserkcn-0/1分数规划 P1404 平均数 既然要让子串平均数最大,那就二分平均数,判断…

【MySQL学习笔记】数据库的CURD(一) - 详解

【MySQL学习笔记】数据库的CURD(一) - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "…

fp16训练神经网络时出现nan问题

问题总结:nan 问题 现象: 在训练过程中,训练损失(Train Loss)和测试损失(Test Loss)的值变为 nan(Not a Number)。这通常意味着训练过程中出现了数值计算错误或不稳定,导致无法计算出有效的损失值。同时,训…

第十篇

今天是10月9号,返校的第一天,学习了链表的相关知识,也学习了栈的有关知识点。

504 品酒大会!!!!!!

歌曲瑞平!!!!!!目前榜单 省流版:

newDay07

1.今天确实是没学多少,背了背单词,看了会《程序员修炼之道》 2.明天去图书馆静心学学吧,主要是Java这一块,再写写作业 3.过完国庆有点犯懒了

【数据结构】可撤销并查集 - Slayer

可撤销并查集只可以按照加入的时间从后到前撤销加边操作。 具体的,我们会把所有加入的边压入一个栈,然后当什么时候要撤销时不断从栈顶弹出一条边,撤销掉。而至于具体的撤销步骤,我们假设此边原来是把 y 连向 x,那…

直播美颜sdk的底层逻辑:人脸美型机制的算法与架构解析

直播美颜sdk的底层逻辑:人脸美型机制的算法与架构解析pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&q…

从开放重定向到XSS:漏洞升级实战

本文详细记录了安全研究员如何发现网站开放重定向漏洞,并通过编码绕过防火墙成功升级为XSS攻击的全过程。文章包含具体的漏洞利用步骤、防火墙绕过技巧和最终的攻击验证,为网络安全爱好者提供了实用的技术参考。从开…

余弦日记

我擦,我不知道2025 年 10 月 2 日,对我来说是传说般的一天,因为我克服了在本科四年间缺乏社交导致的、对陌生人的社交恐惧症,去本地的一个漫展出了余弦。 上一次去漫展,可能是两年前暑假的上海东方 Only,再上一次…

【题解】P11459 [USACO24DEC] Its Mooin Time P

其实是套路题。但有段时间没写过闵可夫斯基和优化 \(dp\) 了,记录一下。 先简单回顾一下闵可夫斯基和。点集 \(P\) 与 点集 \(Q\) 的闵可夫斯基和定义为:\(P+Q=\{a+b|a\in P,b\in Q\}\) 。 对于两个凸包的闵可夫斯基…

创建一个springboot项目,mybatis连接嵌入式数据库H2,实现增删改查功能

@目录目标创建一个spirngboot项目创建流程第一次运行项目,界面如下mybatis连接数据库H2依赖:mybatis + h2配置文件schema.sql实现对用户的增删改查创建entity创建mapper创建service创建controller搭配前端程序,修改…

基于众包的产品质量比较与推荐算法研究

本研究通过众包方式探索影响顾客购买决策的因素,发现顾客评论和问答内容比商家描述更能预测产品质量感知,这些发现可用于改进产品发现算法,提高推荐相关性。探索顾客购买决策背后的原因 研究背景 为了提升产品发现算…

10/9

进一步学习了链表插入的相关知识,规划了自己的实验选题系统。

2025.10.9

今日:学习英语 明日:学习英语 敲代码

深入解析:一款相机是只有桶形畸变 和 枕形畸变的一种,还是两个都有?

深入解析:一款相机是只有桶形畸变 和 枕形畸变的一种,还是两个都有?pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: &…

记忆化

记忆化记忆化搜索(减少重复计算,对搜索的优化)DFS指数级 记忆化保证了每个值只计算一次限制在了NM时间范围内=等价于DP动态规划好处:不需要考虑循环顺序,且只考虑有解的状态,相较递推效率可能更高 弊端:需要考虑边…

重组抗体技术:从原理到应用,解锁高效可控的新一代抗体研发

在抗体技术迭代中,重组抗体凭借 “基因工程改造 + 可控化生产” 的核心优势,逐渐取代传统杂交瘤抗体,成为科研、诊断与治疗领域的主流工具。它不仅解决了动物源抗体的免疫排斥问题,还能灵活设计为全长抗体、小分子…