T701316 重排 (rearrange) 赛后题解

news/2025/11/25 16:28:34/文章来源:https://www.cnblogs.com/yuzihang/p/19268969

题目传送门

思路

静态原问题

给定长度为 \(n\) 的正整数序列 \(a\),你可以任意排列序列 \(a\),使得以下式子的值最大:

\[f(a)=\sum_{i=2}^{n} |a_{i}-a_{i-1}| \]

发现有绝对值求最大值,考虑将数分为大、小两部分,交错放置。
将大的中最小的、小的中最大的放两边更优。

令大的和为 sum2,小的和为 sum1,大的中最小值为 bmin,小的中最大值为 smax,若 n 为奇数令中位数为 mid
\(\begin{align*}\begin{split}ans= \left \{\begin{array}{ll} 2(sum2-sum1)-(bmin-smax), & n \equiv 0\pmod 2\\ 2(sum2-sum1)-\min(bmin-mid,mid-smax), &n \equiv 1\pmod 2\end{array}\right.\end{split}\end{align*}\)

动态问题

需要动态维护以上 4 或 5 个量,求出答案即可。

做法

对顶堆维护,参考 P1168 中位数

代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
int a[3000005];
signed main()
{ios::sync_with_stdio(0);cin.tie(0), cout.tie(0);freopen("rearrange.in", "r", stdin);freopen("rearrange.out", "w", stdout);int n, T;cin >> n >> T;for(int i = 1; i <= n; i ++){cin >> a[i];}priority_queue<int> pq1; //小的部分,大根堆,top 为 smaxpriority_queue<int, vector<int>, greater<int> > pq2; //大的部分,小根堆,top 为 bminint ans = 0, las = 0, sum1 = 0, sum2 = 0; //las 为上一轮答案(此题强制在线)if(n == 1) //特判 n=1,因为对顶堆中至少得有 2 个元素{cout << 0;return 0;}pq1.push(min(a[1], a[2])), pq2.push(max(a[1], a[2]));sum1 = min(a[1], a[2]), sum2 = max(a[1], a[2]);las = max(a[1], a[2]) - min(a[1], a[2]);ans ^= las;int mid;for(int i = 3; i <= n; i ++){a[i] ^= las * T;if(i & 1){if(a[i] < pq1.top()) //属于小的一半{mid = pq1.top();sum1 -= pq1.top() - a[i];pq1.pop();pq1.push(a[i]);}else if(a[i] > pq2.top()) //属于大的一半{mid = pq2.top();sum2 -= pq2.top() - a[i];pq2.pop();pq2.push(a[i]);}else //为中位数{mid = a[i];}las = 2 * (sum2 - sum1) - min(pq2.top() - mid, mid - pq1.top());ans ^= las;}else{if(mid <= a[i]) //把中位数放回去{sum1 += mid;pq1.push(mid);}else{sum2 += mid;pq2.push(mid);}if(a[i] < pq1.top()) //属于小的一半{if(pq1.size() == (i >> 1)) //堆满了{pq2.push(pq1.top());sum2 += pq1.top();sum1 -= pq1.top() - a[i];pq1.pop();pq1.push(a[i]);}else{sum1 += a[i];pq1.push(a[i]);}}else if(a[i] > pq2.top()) //属于大的一半{if(pq2.size() == (i >> 1)) //堆满了{pq1.push(pq2.top());sum1 += pq2.top();sum2 -= pq2.top() - a[i];pq2.pop();pq2.push(a[i]);}else{sum2 += a[i];pq2.push(a[i]);}}else{if(pq1.size() == (i >> 1)) //哪个没满放哪个{sum2 += a[i];pq2.push(a[i]);}else{sum1 += a[i];pq1.push(a[i]);}}las = 2 * (sum2 - sum1) - (pq2.top() - pq1.top());ans ^= las;}}cout << ans;return 0;
}

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

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

相关文章

计算机大信息毕业设计推荐:基于大数据的前列腺患者风险数据可视化分析架构【python+Hadoop+spark】【数据分析、python毕设项目、毕设必备项目、毕设】

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年山东锅炉能效检测机构权威推荐榜单:山东焊缝检测公司/山东焊接工艺评定机构精选

锅炉能效检测作为工业设备节能评估的核心环节,其专业性与权威性直接关系到企业的合规运营与能效提升。根据检测行业数据分析,工业锅炉检测市场正伴随"双碳"政策推进而持续增长。本文基于资质认证、技术能力…

AI智能体编程的未来方向有哪些? - 详解

AI智能体编程的未来方向有哪些? - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Mo…

题解:SP32895 STRMATCH - Match me if you can

简要题意:给定一个文本串 \(S\),以及若干个模式串 \(T\),按顺序输出每个模式串 \(T\) 在文本串 \(S\) 中出现的次数。NOIP 模拟赛出了加强版,过来发个题解。提供一种在线 \(\mathcal O(|S|\sqrt{\sum |T|})\) 的做…

同事警句

事缓则圆,语慢则贵。

机器人技术如何将电子垃圾变为科技金矿

丹麦研究人员开发出AI驱动的机器人系统,可自动更换笔记本屏幕并翻新设备。该系统结合视觉识别技术,能适应不同型号笔记本,旨在解决电子垃圾危机并创造商业价值,预计到2030年全球电子垃圾将达8000万吨。机器人技术如…

决策树训练加速技术突破

介绍一种新型梯度提升决策树训练方法,通过特征分组和二分搜索算法将训练时间减少50%-99%,同时保持模型准确性,特别适用于多任务学习场景。加速决策树训练的新方法 技术背景 梯度提升决策树是一种在大型在线搜索应用…

2025年PP储罐厂家权威推荐榜单:PPH储罐/PP立式储罐/PPH搅拌罐源头厂家精选

根据QYResearch报告出版商调研统计,2031年全球PP储罐市场销售额预计将达到 亿元。在化工、环保、新能源等行业快速发展的推动下,PP储罐以其卓越的耐腐蚀性和轻量化设计,已成为储存腐蚀性介质的核心设备。 本文将基于…

2025年PPH储罐厂家权威推荐榜单:PP储罐/PP立式储罐/PPH搅拌罐源头厂家精选

一台优质的PPH储罐,其无焊缝的螺旋缠绕罐体,能有效应对强酸强碱的长期腐蚀,将传统焊接储罐2-3年就可能出现的渗漏风险延长至15年以上。 在化工、环保、新能源等行业,PPH(聚丙烯)储罐因其卓越的耐腐蚀性和轻量化设…

KSVD的稀疏编码去噪

KSVD(K-Singular Value Decomposition)是一种用于稀疏表示的字典学习算法,广泛应用于信号处理和图像处理中的去噪任务。 1. KSVD字典学习 function [D, X] = ksvd(Y, K, maxIter)% KSVD字典学习% 输入:% Y - 输入…

25.11.25随笔联考总结

考试 开考前去接了个水。准时开题。 首先看了一眼 T1 我觉得是贪心,然后分讨几种情况就可以了。我想了估计没有 2 分钟直接扔了去看 T2,当时 7:51。T2 想了很久没有啥思路,此时 8:10,我 T2 只会 45pts,先看后面的…

【Springer出版 | EI、Scopus检索】第三届人工智能安全与隐私国际学术会议(AISP 2025)

第三届人工智能安全与隐私国际学术会议(AIS&P 2025)将于2025年12月5-7日在中国广州举行。【会议召开有保障、会议历史良好、沿用往届出版社、见刊检索有保障】 第三届人工智能安全与隐私国际学术会议(AIS&P…

四方通信管理机程序实现方案

四方通信管理机程序实现方案,基于其硬件架构和通信规约特性一、硬件架构与核心组件 1. 主控模块处理器:采用工业级32位DSP2812芯片(主频150MHz),支持浮点运算 操作系统:嵌入式Windows NT/Linux双系统架构,支持多…

2025 最新虹膜掌静脉识别厂家权威推荐榜:企业测评结果揭晓,含识别机 / 门禁 / 通道闸等产品优选签到设备/模组/考勤设备/箱/门禁/更衣柜/柜公司推荐

引言 在全球数字化浪潮推动下,身份识别技术已成为安防、金融、医疗等关键领域的核心支撑。传统生物识别技术在复杂环境适应性、防伪安全性上的短板日益凸显,虹膜掌静脉识别凭借与生俱来的唯一性、终身稳定性及强防伪…

「笔记分享」迪文串口屏基础GUI开发流程

一、前言 迪文的资料较为混乱,花费了大量的时间研究。首先:迪文芯片分为T5和T5L系列,并不兼容,在T5L内同时分为T5L0\T5L1\T5L2, 但在官网最新的<迪文 T5L ASIC 应用开发指南.pdf>版本为V1.1,这一参考资料中…

OIFC 2025.11.25 模拟赛总结

生日当天还有模拟赛( T1 Pocky游戏 题意简述 Mdk 和 Hmr 正在吃 Pocky,她们感到有些无聊,于是决定玩一个小游戏。 现在有一根长度为 \(n\) 的 Pocky,其中从左往右数第 \(i\) 单位长度 Pocky 的美味值为 \(a_i\)。现…

实验三.类和对象

任务1. button.hpp#pragma once#include <iostream> #include <string>class Button { public:Button(const std::string &label_);const std::string& get_label() const;void click();private:s…

企业微信会话内容存档功能测试,能获取成员或客户以及群消息内容,通过拉取可以将消息备份到自己服务器

wx:llike620 gofly.v1kf.com 经过几天的仔细测试和摸索,我终于把企业微信客服的会话内容存档功能给彻底搞明白了。这个功能看似强大,但实际上有不少“坑”,今天就来和大家分享我的发现。 会话存档能做什么? 当我们…

桂林高中一对一辅导机构权威榜单:2025阳朔、龙胜等地区辅导机构综合实力榜

在桂林,从秀峰区、象山区的学区房家长到阳朔、龙胜的乡镇家庭,“孩子偏科严重却找不到对症的老师”、“线下机构收费高效果却参差不齐”、“想了解学习进度还要反复联系班主任”已成为无数高中家庭的共同焦虑。 广西…

T701793 网络延迟 (latency) 赛后题解

题目传送门 思路 根据定义,用户终端 \(a\) 的顺序就是在树上从左往右的叶子节点。 可以发现建树时相当于每次选两个相邻的点,满足 \(|a_i-a_{i+1}|\le1\),将他们连起来,父节点权值为 \(\min(a_i,a_{i+1})\),即删掉…