首页 > 其他分享 >[ZR] 绝对值划分

[ZR] 绝对值划分

时间:2024-11-14 18:18:20浏览次数:1  
标签:子段 min 段数 划分 绝对值 权值 区间 ZR

source:zr 二十联测 day19 C

题意

定义序列 \(\{a_i\}\) 的权值为序列中元素之和的绝对值。

定义一个序列的划分 \(p_1,p_2,\cdots,p_k=n\) 为将序列 \(\{a_i\}\) 划分成了 \([1,p_1],[p_1+1,p_2],\cdots,[p_k+1,n]\) 这 \(k\) 段。定义划分的权值为其划分出来的 \(k\) 个子段的权值的最小值。

\(q\) 次操作,包含单点修改 \(a_i\)、区间查询 \(a_{[l,r]}\) 的划分的最大权值。

\(n,q\le 10^6\)

分析

性质 1:划分的每一段的和一定是正负交替出现。

将两个相邻的、同号的子段合并显然不劣。

性质 2:划分的段数不超过 3。

考虑中间的任意两个相邻的子段 \(i,i+1\),显然 \(i-1,i+2\) 的两个子段正负号不同。不妨令 \(i-1\) 子段和为正。若这两个子段的和为正,则可以跟 \(i-1\) 子段合并;若为负则跟 \(i+2\) 子段合并。

令前缀和数组为 \(s_i\),查询区间为 \((l,r]\)。

划分段数为 1 显然。

若划分段数为 2,则我们需要求 \(\max_p \min(|s_p-s_l|,|s_r-s_p|)\)。不难发现当 \(p\) 取到 \(s_p\) 为区间最大值/最小值时最优。

若划分段数为 3,不妨设 \(s_l\le s_r\),令划分方案为 \((l,u],(u,v],(v,r]\)。

性质 3: 存在最优解使得第一个子段(令其为 \(b_1\))必定为正。

若其为负,则 \(u\) 取在 \(s_i\) 最小值处最优,此时划分段数为 2 显然不劣。

性质 4:划分点 \(u,v\) 必定满足 \(s_u>s_r,s_v<s_l\)。

若不满足,因为三个子段的正负号分别为正负正,则 \(s_u,s_v\) 必定有至少一个在 \([s_l,s_r]\) 内,此时划分段数为 1 更优。

根据性质 4,此时的答案转化成了 \(\min(s_u-s_l,s_r-s_v)\)(\(s_u-s_v\) 显然比这两个东西大),由于 \(u<v\),所以此时我们可以考虑枚举分界线指针,让 \(u\) 为左区间最大值,\(v\) 为右区间最小值即可。

发现 \(\min(s_u-s_l,s_r-s_v)\) 是个单峰的东西(前者随指针右移而增大,后者随指针右移而减小),用线段树维护 \(s_i\),在线段树上二分即可。

考虑怎么把复杂度做到一老哥。考虑在线段树上把询问区间拿出来,形成 \(O(\log n)\) 个区间,先在这些区间上面执行上述流程(实际上枚举就行),然后找到一个最优区间,在该区间内线段树上二分即可。

标签:子段,min,段数,划分,绝对值,权值,区间,ZR
From: https://www.cnblogs.com/dcytrl/p/18546552

相关文章

  • 代码随想录算法训练营第三十天| 452. 用最少数量的箭引爆气球 、435. 无重叠区间 、76
    452.用最少数量的箭引爆气球思路:以前做过最大不相交子序列的题,这次也是往这根据某一端排序的思路想的,排序后如下图,只需要维护一个公共序列的右边界r就可以了,下一次判断时,只需要判断子区间的左边是否小于r。这个题有点坑的是使用Arrays排序,如果使用昨天的方法:Arra......
  • 二分找最小绝对值
    Klee'sSUPERDUPERLARGEArray!!!每次测试时间限制:2秒每次测试的内存限制:256MB题目描述Klee拥有一个长度为n的数组a,数组中的元素依次为[k,k+1,...,k+n-1]。Klee希望选择一个索引i(1≤i≤n),使得x=|a1+a2+⋯+ai-ai+1-⋯-an|最小。其中对于任意......
  • 2024-11-13:求出所有子序列的能量和。用go语言,给定一个整数数组nums和一个正整数k, 定义
    2024-11-13:求出所有子序列的能量和。用go语言,给定一个整数数组nums和一个正整数k,定义一个子序列的能量为子序列中任意两个元素之间的差值绝对值的最小值。找出nums中长度为k的所有子序列的能量和,对结果取模10^9+7后返回。输入:nums=[1,2,3,4],k=3。输出:4。解释:......
  • 2024-11-13:求出所有子序列的能量和。用go语言,给定一个整数数组nums和一个正整数k, 定义
    2024-11-13:求出所有子序列的能量和。用go语言,给定一个整数数组nums和一个正整数k,定义一个子序列的能量为子序列中任意两个元素之间的差值绝对值的最小值。找出nums中长度为k的所有子序列的能量和,对结果取模10^9+7后返回。输入:nums=[1,2,3,4],k=3。输出:4。解释:nums......
  • 解决DDD最大难题-如何划分领域
    https://www.cnblogs.com/Can-daydayup/p/18528659 前言在.NET开发中,为了准确统计对应方法的执行时间,我们最常用的方式是手动使用Stopwatch来显式编写计时逻辑,但是假如你需要大量的使用Stopwatch来进行耗时统计的话不利于保持代码的整洁和增加代码的维护成本。项目介绍......
  • 使用YOLOv8训练无人机检测数据集10158张 txt格式小目标检测 txt标注 标签名UAV 图片与
    准备工作安装依赖首先,确保你的开发环境中安装了必要的软件和库。YOLOv8是基于PyTorch框架的,因此你需要安装Python以及PyTorch。安装Python(推荐3.7或更高版本)安装PyTorch:你可以从PyTorch官方网站获取安装命令,根据你的系统配置选择合适的安装方式。克隆YOLOv8的官方仓库......
  • 网络基础:http协议和内外网划分
    声明学习视频来自B站UP主泷羽sec,如涉及侵权马上删除文章笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负泷羽sec的个人空间-泷羽sec个人主页-哔哩哔哩视频https://space.bilibili.com/350329294一,HTTP协议1......
  • 【计算机网络】子网划分
    子网划分ip地址分类公网:A类:1.0.0.0~127.255.255.255  作用:大量主机公网B类:128.0.0.0~191.255.255.255作用:国际大公司政府C类:192.0.0.0~233.255.255.255作用小公司校园网科研单位D类:234.0.0.0~239.255.255.255作用:组播E类:240.0.0.0......
  • 如何训练——草原牛羊马目标检测数据集 数据集拥有3个类别、总计2400张图片 支持YOLO
    如何使用YOLOv8进行草原牛羊马的目标检测,并提供详细的训练代码和数据集准备步骤。假设你已经有一个包含2400张图片的数据集,并且这些图片已经标注了YOLO格式的标签,且已经分好训练集、验证集和测试集。项目结构深色版本grassland_animal_detection/├──dataset/│......
  • [ZR] 城市
    source:zr二十联测day15C题意给定\(n\)个点\(m\)条边的图,求该图导出连通子图数量对2取模的结果。保证一条边两个端点编号差\(\le13\)。\(n\le50\)。分析原题相当于求连通块数量为1的导出子图的数量。考虑利用模数为2的性质。性质:答案等于\(\dfrac{\sum2^......