Beginning

这道题思维难度很大,有两个难点其实都不好解决,但因为其代码太过弱智所以只是绿题。

本题解详细地分析了做题时的历程与思路,所以希望大家可以仔细地完整阅读。

Analysis

首先先大体观察一下题目的性质:nnn 是排列,这可能会有用;题目的权值求法其实就是逆序对,而逆序对产生的贡献一定有偶数个,所以我们的答案一定是偶数。

同时,对二取模也十分引人注意。这意味着我们的 vvv 序列其实是一个 010101 序列。

题目要求可以选择执行一次移动操作使得权值和变大,也就是我们要通过这一次操作尝试变出更多的 111。尝试一下发现,每次移动一个数只会对其移动中跨过的数产生影响,如果是 010101 序列的话就体现在会把 010101 翻转。对于移动的数字,如果跨过了奇数个位置则翻转,否则不变。

可以简单理解一下:

  1. 如果一个数 xxx 从位置 aaa 移动到位置 bbbb+1b+1b+1 之间(满足 a<ba<ba<b),那么对于 [a+1,b][a+1,b][a+1,b] 中的任意一个数字 ttt,如果 xxx 在移动前对 ttt 产生了贡献,则 x>tx>tx>t,移动后 xxx 将不再对 ttt 产生贡献,在模二的意义下就相当于 ttt 异或上 111,即 010101 翻转。反之亦然。
  2. 对于 xxx 同理,其移动后原来产生贡献的数字一定不产生贡献,原来不产生贡献的数字一定会产生新贡献。看贡献变化量的奇偶性,如果跨过偶数个那么贡献变化量一定是偶数(偶数 - 偶数 = 偶数),在模二意义下贡献值不变。反之亦然。

我们好像得到了一个初步的简化题面:给定一个 010101 序列,可以翻转某一个区间,使得最终序列中 111 个数最多。

显然,我们要求一个类似最大子段和的东西,然后用初始贡献加上一次翻转能带来的最大贡献就是答案。

同时我们还发现翻转区间的长度只能是偶数,因为上述 xxx 跨过奇数个位置的情况下 xxx 自己也会变,其实就等价于翻转了 [a,b][a,b][a,b] 这个长度为偶数的区间。

所以我们要找到一个长度为偶数的区间使得区间内 000 的个数减去 111 的个数得到的差最大。

考虑把 000 映射成 111,把 111 映射成 −1-11,然后统计前缀和。对于每个位置,可以记录下之前奇数位置与偶数位置上的最小前缀和,根据下标奇偶性转移最大差值即可。

时间复杂度 O(n)O(n)O(n)


这还没完,转换完题意后我们还要考虑如何计算初始贡献。这道题时限卡树状数组的 log⁡\loglog(实测光放一个 sort 交上去就会 TLE),所以我们还要考虑如何线性求初始贡献。

肯定要从对二取模这个性质下手。发现我们最开始得到的逆序对贡献数一定是偶数这个结论其实很对,假设对于 pip_ipi,因为是排列所以比 pip_ipi 小的数就有 pi−1p_i-1pi1 个。设 tit_iti 表示 iii 左边比 pip_ipi 小的数的个数,根据题目贡献可以写成 [(i−1)−ti]+[(pi−1)−ti]=i+pi−(2ti+2)[(i-1)-t_i]+[(p_i-1)-t_i] = i+p_i - (2t_i+2)[(i1)ti]+[(pi1)ti]=i+pi(2ti+2),后半部分明显被取模二约掉了!所以最终的初始贡献表达式即为 vi=(i+pi) mod 2v_i=(i+p_i) \bmod 2vi=(i+pi)mod2

根据上述方法预处理即可,时间复杂度 O(n)O(n)O(n)

Code

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 5e6 + 7;int n, a[maxn], s[maxn];void solve()
{int ans = 0;cin >> n;for(int i = 1; i <= n; i ++){cin >> a[i];a[i] = (i + a[i]) % 2; // 计算初始值ans += (a[i] == 1); // 统计答案s[i] = s[i - 1] + (a[i] == 0? 1 : -1); // 转化+预处理前缀和}int min1 = 1e9, min2 = 0; // 奇数、偶数位置的最小前缀和int maxd = 0; // 最大贡献for(int i = 1; i <= n; i ++){if(i % 2 == 0){maxd = max(maxd, s[i] - (i==2? 0:min2)); // 特判一下之前还没有前缀和的时候可以认为能全选(历史前缀和=0)min2 = min(min2, s[i]);}else{maxd = max(maxd, s[i] - (i==1? 0:min1));min1 = min(min1, s[i]);}}cout << ans + maxd << '\n';
}signed main()
{ios :: sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);int T; cin >> T;while(T --) solve();return 0;
}

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

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

相关文章

Android Studio下载gradle文件很慢的捷径之路

小伙伴们是不是也经常遇到导入新的项目时&#xff0c;AS一直卡在gradle的下载中。下面介绍一种简单暴力的方式来处理这个问题。 首先我们到gradle的官网下载自己想要的gradle版本。我这里以gradle7.5为例。点击下载gradle-7.5-bin.zip的压缩包。下载完成后无需解压。直接到C:\U…

【C++】全局变量/静态变量的初始化时机

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录一、全局变量下断点调试1. int a 10; —— 不能卡住断点2. static int b; —— 不能卡住断点3. MyClass c; —— 可以卡住断点4. static MyClass d; —— 可以卡住断…

水体反光 + 遮挡难题破解!陌讯多模态融合算法在智慧水务的实测优化

一、智慧水务行业检测痛点&#xff08;数据支撑 场景难点&#xff09; 根据《2023 年中国智慧水务发展报告》&#xff0c;当前水务监控系统在核心业务场景中面临两大效率瓶颈&#xff0c;直接影响水厂运维与供水安全&#xff1a; 高误报率导致运维资源浪费&#xff1a;水厂沉…

C++的指针和引用:

目录 引用&#xff1a; 注意&#xff1a; 左值引用和右值引用&#xff1a; 左值引用&#xff1a; 右值引用&#xff1a; 指针&#xff1a; 指针与引用的区别&#xff1a; 引用&#xff1a; 在C中&#xff0c;‌引用‌是一种为已存在变量创建别名的机制&#xff0c;它允…

图像处理中的伪影

目录 一、块效应伪影 / 块状伪影 二、 去除块状伪影 三、振铃伪影 一、块效应伪影 / 块状伪影 块状伪影(Blocking Artefacts)是对经过变换编码的图像进行重建时&#xff0c;图像中可能会出现压缩过程产生的可见伪影。基于块的变换编码中&#xff0c;一种常见伪影是 “块效应…

Java:对象的浅拷贝与深拷贝

目录 一、概念 二、实现方式 2.1 浅拷贝&#xff08;不推荐&#xff09; 2.2 深拷贝 2.2.1 方法一&#xff1a;重写 clone() 方法并递归克隆&#xff08;常用&#xff09; 2.2.2 方法二&#xff1a;通过序列化实现&#xff08;更强大&#xff0c;但更重&#xff09; 2.2…

佰钧成 社招 一面

1. “评估需求、排期”的工作流程&#xff1f; “我的工作流程一般是这样的&#xff1a; 需求评审&#xff1a; 首先会和产品、后端同学一起过需求&#xff0c;确保我完全理解了业务背景和要实现的价值&#xff0c;而不仅仅是功能点。技术方案设计&#xff1a; 之后&#xff0c…

最短路径问题(图论)

1 Floyd 作用&#xff1a; 求图中所有顶点之间的最短路径&#xff0c;包括有向图或者无向图&#xff0c;权重正负皆可&#xff0c;用来一次性求所有点之间的最短路径。 思路是 通过逐步扩大中间层&#xff0c;使得最短路径不断被更新&#xff0c;直到中间层扩大到n位置&#…

2025年8月新算法—云漂移优化算法(Cloud Drift Optimization Algorithm, CDO)

1、简介 这项研究介绍了云漂移优化&#xff08;数位长&#xff09;算法&#xff0c;这是一种创新的自然启发的元启发式方法来解决复杂的优化问题。CDO模仿受大气力影响的云粒子的动态行为&#xff0c;在探索和利用之间取得了微妙的平衡。它具有自适应权重调整机制&#xff0c;可…

VS Code进行.NET开发时使用断点和热重载

VS Code 调试热重载 1. VS Code 设置 安装扩展&#xff1a;C#、C# Dev Kit设置中搜索hot reload&#xff0c;选择C#开发工具包&#xff0c;把下图的几项全部打勾2. 启动项目&#xff08;仅用左侧“运行和调试”&#xff09; 打开解决方案&#xff0c;选你的启动项目的“.NET La…

mysqlbinlog解析命令

解析 MySQL Binlog 详细信息的命令以下是解析 MySQL Binlog 详细信息的常用命令&#xff1a;1. 基本 binlog 解析命令# 查看 binlog 文件内容&#xff08;基本格式&#xff09; mysqlbinlog /var/lib/mysql/mysql-bin.000001# 查看特定时间段的 binlog mysqlbinlog --start-dat…

算法训练营day60 图论⑩ Bellman_ford 队列优化算法、判断负权回路、单源有限最短路(修改后版本)

增加对最短路径的优化算法、负权回路、单源有限最短的讲解 Bellman_ford 队列优化算法 -------------------------------------------------------------------------------- 8.24更新&#xff1a;该算法是针对带负值的最短路径的优化算法&#xff0c;核心通过队列来实现&…

Python 学习(十六) 下一代 Python 包管理工具:UV

目录1. UV 介绍1.1 什么是UV&#xff1f;1.2 UV的核心优势1.3 UV和其他工具对比1&#xff09;UV vs. pipvirtualenv2&#xff09;UV vs. Conda3&#xff09;UV vs. Poetry4&#xff09;功能对比表2. UV的安装与常用命令2.1 安装UV1&#xff09;使用官方安装脚本&#xff08;推荐…

Redis学习笔记 ----- 缓存

一、什么是缓存 缓存&#xff08;Cache&#xff09;是数据交换的缓冲区&#xff0c;是存储数据的临时地方&#xff0c;一般读写性能较高。 &#xff08;一&#xff09;缓存的作用 降低后端负载&#xff1a;减少对数据库等后端存储的直接访问压力。提高读写效率&#xff0c;降低…

React响应式链路

文章目录响应式链路的核心环节1.状态定义与初始化2.状态更新触发&#xff08;状态变更&#xff09;3.调度更新&#xff08;Scheduler&#xff09;4.重新渲染&#xff08;Render 阶段&#xff09;5.协调&#xff08;Reconciliation&#xff09;与 Fiber 架构6.提交更新&#xff…

软件设计师——计算机网络学习笔记

一、计算机网络 网络基础 1. 计算机网络的分类2. 网络拓扑结构 总线型(利用率低、干扰大、价格低) 星型(交换机形成的局域网、中央单元负荷大) 环型(流动方向固定、效率低扩充难) 树型(总线型的扩充、分级结构) 分布式(任意节点连接、管理难成本高)一般来说&#xff0c;办公室局…

1200 SCL学习笔记

一. IF. 如果。下面是一个起保停IF #I_start AND NOT #I_stop THEN //如果I_start接通 和 I_stop没有接通#Q_run : 1; //输出Q_run 接通 ELSIF #I_stop THEN //如果I_stop接通#Q_run : 0; //。。。。。。 END_IF;二. CASECASE…

单例模式与线程池

1. 单例模式单例模式是一种常用的设计模式&#xff0c;它确保一个类只有一个实例&#xff0c;并提供一个全局访问点来获取这个实例。这种模式在需要控制资源访问、管理共享状态或协调系统行为时非常有用。单例模式的核心特点&#xff1a;私有构造函数&#xff1a;防止外部通过n…

Chrome和Edge如何开启暗黑模式

Edge和Chrome浏览器都提供了实验性功能&#xff0c;可以通过修改实验性设置来开启暗黑模式。 在浏览器地址栏中输入edge://flags/&#xff08;Edge&#xff09;或chrome://flags/&#xff08;Chrome&#xff09;。在搜索框中输入“dark”&#xff0c;找到与暗黑模式相关的选项。…

【科研绘图系列】浮游植物的溶解性有机碳与初级生产力的关系

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍 数据准备 数据处理 溶解性有机碳(DOC)与初级生产力(NPP)的关系 溶解性有机碳(DOC)与光照强度(PAR)的关系 数据可视化 加载R包 数据下载 导入数据 画图1 画图2 总结 系统信…