leetcode:2926. 平衡子序列的最大和 【树状数组维护最大前缀和】

题目链接

lc2926

题目描述

在这里插入图片描述

题目思路

定义b[i] = nums[i] - i
目标是从b中找到一个非降子序列使得元素和最大
# b[i] = nums[i] - i
# 找到b的一个非降子序列使得元素和最大
# f[i]: 子序列最后一个数下标是i,对应的最大子序列
# f[i] = max (max f[j], 0) + nums[i] (j < i and b[j] <= b[i])
# 也就是维护f[j]的前缀最大值
# 10 ** 9: 离散化处理 + 重新标序号

ac code

# 树状数组模板(维护前缀最大值)
class BIT:def __init__(self, n: int):self.tree = [-inf] * ndef update(self, i: int, val: int) -> None:while i < len(self.tree):self.tree[i] = max(self.tree[i], val)i += i & -idef pre_max(self, i: int) -> int:mx = -infwhile i > 0:mx = max(mx, self.tree[i])i -= i & -ireturn mxclass Solution:def maxBalancedSubsequenceSum(self, nums: List[int]) -> int:n = len(nums)# b[i] = nums[i] - i# 找到b的一个非降子序列使得元素和最大# f[i]: 子序列最后一个数下标是i,对应的最大子序列# f[i] = max (max f[j], 0) + nums[i] (j < i and b[j] <= b[i])# 也就是维护f[j]的前缀最大值# 10 ** 9: 离散化处理 + 重新标序号b = sorted(set(x - i for i, x in enumerate(nums)))t = BIT(len(b) + 1) # 经典初始化for i, x in enumerate(nums):j = bisect_left(b, x - i) + 1 # 找到b[i]离散化后的位置f = max(t.pre_max(j), 0) + x # 计算f[i]t.update(j, f)return t.pre_max(len(b)) # 所有f的最大值

树状数组维护前缀最大值模版

# 树状数组模板(维护前缀最大值)
class BIT:def __init__(self, n: int):self.tree = [-inf] * ndef update(self, i: int, val: int) -> None:while i < len(self.tree):self.tree[i] = max(self.tree[i], val)i += i & -idef pre_max(self, i: int) -> int:mx = -infwhile i > 0:mx = max(mx, self.tree[i])i -= i & -ireturn mx

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

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

相关文章

LeetCode148.排序链表

看完题目的想法是&#xff0c;直接把所有节点的值都遍历出来放进优先队列里面&#xff0c;然后从头节点遍历一次&#xff0c;每次把优先队列poll()的值赋给节点的val即可&#xff0c;说实话&#xff0c;想完还觉得估计有问题怎么可能这么简单&#xff0c;但是不管了&#xff0c…

ubuntu 18.04安装自己ko驱动 修改secure boot

因为本人老折腾自己的电脑&#xff0c;所以老重装系统&#xff0c;然后配置又不见了&#xff0c;这次配置赶紧记下来 insmod netlink_test.ko 报错&#xff1a;insmod: ERROR: could not insert module netlink_test.ko: Operation not permitted 添加 sudo insmod netlink_te…

RS232通讯转485通讯接线心得

最近在接can 485 232的通讯线&#xff0c;无可避免的遇到了一系列问题&#xff0c;各个厂家之间的引脚定义不太一样&#xff0c;这就导致我们要经常的接线&#xff0c;现在也是有了一点心得所以记录下来。接下来进入标题&#xff1a; 目前我遇到的问题是&#xff1a;转接泰琪丰…

虚拟机没有桥接模式--物理机WiFi不见了--注册表修复

我们知道虚拟机有三种模式&#xff1a; vmnet0 桥接模式&#xff1b;vmnet1 仅主机模式&#xff1b;vmnet8 NAT模式 我自己以前一直用的NAT模式&#xff0c;今天突然要用到桥接模式&#xff0c;发现无法切换... 我下面这个是后面弄好了的&#xff0c;最开始是没有显示桥接模式…

【Git】Git 学习笔记_操作远程仓库

1. SSH 配置和克隆仓库 ssh-keygen -t rsa -C "xxxqq.com"回车后出现以下内容&#xff0c;直接回车&#xff1a; Generating public/private rsa key pair. Enter file in which to save the key (/Users/your_user_directory/.ssh/id_rsa): (按回车键) Enter pass…

安防视频监控平台EasyCVR出现目录在线,通道离线的问题该如何解决?

视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安防视频监控的能…

matlab中实现画函数图像添加坐标轴

大家好&#xff0c;我是带我去滑雪&#xff01; 主函数matlab代码&#xff1a; function PlotAxisAtOrigin(x,y); if nargin 2 plot(x,y);hold on; elsedisplay( Not 2D Data set !) end; Xget(gca,Xtick); Yget(gca,Ytick); XLget(gca,XtickLabel); YLget(gca,YtickLabel)…

如何使用ArcGIS Pro制作个性三维地形图

制作三维地图制作的多了&#xff0c;想着能不能换个“口味”&#xff0c;恰好看见制作六边形蜂窝图&#xff0c;灵光一闪&#xff0c;想着将二者结合&#xff0c;将平滑的三维地形图改成柱状图&#xff0c;从结果来看还可以&#xff0c;这里将制作方法分享给大家&#xff0c;希…

Node.js |(六)express框架 | 尚硅谷2023版Node.js零基础视频教程

学习视频&#xff1a;尚硅谷2023版Node.js零基础视频教程&#xff0c;nodejs新手到高手 文章目录 &#x1f4da;express使用&#x1f407;初体验&#x1f407;express路由⭐️路由的使用⭐️获取请求参数⭐️获取路由参数&#x1f525;练习&#xff1a;根据路由参数响应歌手信息…

描述低轨星座的特点和通信挑战,以及它们在5G和B5G中的作用。

文章目录 2章4 章5章&#xff08;没看&#xff09;6章&#xff08;没看&#xff09; 2章 将卫星星座中每个物理链路中可实现的数据速率、传播延迟和多普勒频移与3GPP技术报告中的参数进行分析和比较[3]。 相关配置 面向连接的网络&#xff0c;预先简历链路 卫星和地面终端有…

劝学:Android 14 Framework 引入了哪些“新”技术栈

2023 年 Google I/O 已于 2023 年 5 月 10 日 拉开帷幕&#xff0c;Android 14 Beta 版本近期也已经 释放 到 Google partners&#xff0c;本文主要分析 Google 在 Android 14 框架代码中引入了哪些新的技术栈&#xff0c;而对于新功能和 API Change&#xff0c;则并不在本文的…

JavaWeb课程复习资料——idea创建JDBC

1、创建空的Java Project 输入项目名称 空项目 2、引入jar包步骤 依次点击 File -> Project Structure&#xff08;快捷键 Ctrl Alt Shift s&#xff09;&#xff0c;点击Project Structure界面左侧的“Modules”如图&#xff1a; 在 【Dependencies】 标签界面下&…