CF182C Optimal Sum

news/2025/9/19 19:21:41/文章来源:https://www.cnblogs.com/-AzureSky-/p/19101371

题目传送门

贪心、权值线段树

题意

给定一个数字 \(len\) 和一个长度为 \(n(n\le 10^5)\) 的数组 \(a\),你最多可以执行 \(k\) 次操作 \(a_i \leftarrow -a_i\),请你最大化

\[\max \limits_{i\in [1,n]} \bigl | \sum_{j=0}^{j=len-1} a_{i+j} \bigr | \]

题解

我们只有两种方向:让绝对值里东西尽可能小或者尽可能大,因此我们只有两种选择,选 \(k\) 个最小或最大的数反转。

我们通过一遍扫描过去统计答案,每次会有单点修改,现在我们要找一个可以维护区间前 \(k\) 大的数据结构,支持单点修改。

这里容易想到用离散化加权值线段树的方法,相当于一个桶,维护权值为 \(x\) 的数的个数和权值区间和。

这里可以用结构体开两颗一模一样的线段树,一个只存正数,一个只存负数。时间复杂度 \(O(n \log n)\)

代码

#include <bits/stdc++.h>
#define int long long using namespace std;
const int N=1e5+5;int n,len,k;
struct node{int val,sgn,id;
}a[N]; 
int w[N],tot;struct SegTree{#define ls k<<1#define rs k<<1|1 #define mid (l+r>>1)int sum[N<<2],cnt[N<<2];inline void pushup(int k){sum[k]=sum[ls]+sum[rs];cnt[k]=cnt[ls]+cnt[rs];}void add(int k,int l,int r,const int& x){if(l==r){sum[k]+=w[x];cnt[k]++;return;}if(x<=mid) add(ls,l,mid,x);else add(rs,mid+1,r,x);pushup(k);}void del(int k,int l,int r,const int& x){if(l==r){sum[k]-=w[x];cnt[k]--;return;}if(x<=mid) del(ls,l,mid,x);else del(rs,mid+1,r,x);pushup(k);}int query(int k,int l,int r,int x){if(!x) return 0;if(l==r) return w[l]*min(x,cnt[k]);if(cnt[rs]>=x) return query(rs,mid+1,r,x);return sum[rs]+query(ls,l,mid,x-cnt[rs]);}#undef ls #undef rs#undef mid
}tr[2];signed main(){cin.tie(nullptr)->sync_with_stdio(false);cin>>n>>len;for(int i=1;i<=n;i++){cin>>a[i].val;if(a[i].val<0) a[i].sgn=-1;else a[i].sgn=1;a[i].val=abs(a[i].val);w[++tot]=a[i].val;}cin>>k;sort(w+1,w+tot+1);tot=unique(w+1,w+tot+1)-w-1;for(int i=1;i<=n;i++) a[i].id=lower_bound(w+1,w+tot+1,a[i].val)-w;int s0=0,s1=0;for(int i=1;i<=len;i++){if(a[i].sgn==1) s0+=a[i].val,tr[0].add(1,1,tot,a[i].id);else s1+=a[i].val,tr[1].add(1,1,tot,a[i].id);}int ans=max(2*tr[0].query(1,1,tot,k)+s1-s0,2*tr[1].query(1,1,tot,k)+s0-s1);for(int i=2;i+len-1<=n;i++){if(a[i-1].sgn==1) tr[0].del(1,1,tot,a[i-1].id),s0-=a[i-1].val;else 			  tr[1].del(1,1,tot,a[i-1].id),s1-=a[i-1].val;if(a[i+len-1].sgn==1) tr[0].add(1,1,tot,a[i+len-1].id),s0+=a[i+len-1].val;else				  tr[1].add(1,1,tot,a[i+len-1].id),s1+=a[i+len-1].val;ans=max({ans,max(2*tr[0].query(1,1,tot,k)+s1-s0,2*tr[1].query(1,1,tot,k)+s0-s1)});}cout<<ans;return 0;
}

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

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

相关文章

完整教程:WinForms 项目里生成时选择“首选目标平台 32 位导致有些电脑在获取office word对象时获取不到

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

关于网络社交

如果连自己三次元的现实生活都不能处理的很好的话,我并不认为,具备处理好二次元社交的关系, 把精力放在虚无缥缈的网络社交,而不顾三次元现实生活得死活,只会显得自己无知与无趣。

nginx学习笔记一:基础概念

1、什么是nginx Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。 特点:占用内存小、并发能力强。 2、nginx的基本概念:反向代理 正向代理:比喻:你(客户端)自己订不到…

HTB UNIV CTF 24 Armaxix靶场漏洞链:命令注入与账户接管实战

本文详细分析了HTB UNIV CTF 24中Armaxix Web靶场的双漏洞链利用过程,涵盖密码重置漏洞导致的账户接管和Markdown解析器的命令注入漏洞,最终通过分号注入实现远程代码执行。HTB UNIV CTF 24 (Armaxix - WEB) 漏洞分析…

【c++进阶系列】:万字详解AVL树(附源码实现) - 教程

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

【JAVA接口自动化】JAVA如何读取Yaml文档

【JAVA接口自动化】JAVA如何读取Yaml文档pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "M…

完整教程:uni-app 常用钩子函数:从场景到实战,掌握开发核心

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

PyTorch Weight Decay 技术指南

Weight Decay(权重衰减)是深度学习中重要的正则化技术,通过在训练过程中对模型权重施加惩罚,防止过拟合,提升模型泛化能力。PyTorch Weight Decay 技术指南 目录摘要 概念与理论2.1 核心概念 2.2 与 L2 正则化的关…

AUTOSAR进阶图解==>AUTOSAR_SWS_PDURouter - 实践

AUTOSAR进阶图解==>AUTOSAR_SWS_PDURouter - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas"…

getDefaultMidwayLoggerConfig报错;解决方法。

getDefaultMidwayLoggerConfig报错;解决方法。 解决方案:配置环境变量:MIDWAY_LOGGER_WRITEABLE_DIR源码是:getDefaultMidwayLoggerConfig(appInfo) { var _a; const isDevelopment = (0, util_1.isDevelopmentEn…

js获取浏览器语言,以及调用谷歌翻译api翻译成相应的内容

翻译接口:https://translate.googleapis.com/translate_a/single?client=gtx&sl=(翻译前的语言)&tl=(翻译后的语言)&dt=t&q=(需要翻译的内容)调用案例: https://translate.googleapis.com/tr…

总结RocketMQ中的常见问题

总结RocketMQ中的常见问题 一、MQ 如何保证消息不丢失 1. 丢消息的关键环节跨网络环节:消息链路中1(生产者→Broker)、2(Broker 主→从)、4(Broker→消费者) 三个场景,因网络不稳定性可能导致请求丢失。 本地缓…

The 2025 ICPC Asia EC Regionals Online Contest (II)

疑似第一场没题解?那先写第二场了。 大家打得很棒,状态起来了!继续保持。 B. Rectangular Wooden Block给定 \(L\times W\times H\) 的长方体,每个 \(1\times 1\times 1\) 的小立方体有价值 \(V(i,j,k)\),选择其中…

Python实现Elman RNN与混合RNN神经网络对航空客运量、啤酒产量、电力产量时间序列数据预测可视化对比

全文链接:https://tecdat.cn/?p=43924原文出处:拓端数据部落公众号视频出处:拓端抖音号@拓端tecdat一、引言 作为长期深耕时间序列预测领域的数据科学家,我们在项目中频繁发现一个共性痛点:多数团队在选择循环神…

4G/Wi-Fi/以太网三网合一,智能融合通信实战案例集

聚焦通信技术落地痛点,4G/Wi-Fi/以太网智能多网融合方案,通过动态负载均衡与故障自愈机制,构建高可用通信链路。实战场景覆盖远程监控、智能交通等领域,技术细节与实施步骤全解析。 本文以Air8000开发板WebSocket应…

关于介绍自己的第一篇随笔

你好啊,我是张家瑞,一名普通平凡的学生。 仔细想来我的兴趣爱好也没什么特别的,也同他人一样爱打打游戏听听音乐,非常喜欢格斗游戏和卡牌游戏,若有喜欢街霸,罪恶装备,游戏王的同学可以找我打(开个玩笑),稍微…

深入解析:N32G43x Flash 驱动移植与封装实践

深入解析:N32G43x Flash 驱动移植与封装实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &qu…

Backblaze上如何传大文件

问题 创建好一个存储桶后,直接点击上传文件即可。但是当文件很大时将会显示:第一次通过以下步骤解决 第一步:准备工作 1.安装命令行工具 (B2 CLI) pip install --upgrade b2检验安装是否成功(可选) b2 version显示:…

解题报告-老逗找基友 (friends)

老逗找基友 (friends) 题目背景 吴老逗有 \(n\) 个基友,位于平面直角坐标系的整点上。每个基友已与其最近的基友(如有多个则取编号最小)建立了双向心灵感应。但这样形成的网络可能不连通,因此吴老逗可以使用爱之魔…