LeeCode 3165 线段树
题意
传送门 LeeCode 3165 不包含相邻元素的子序列的最大和
题解
考虑不含相邻子序列的最大和,在不带修改的情况下容易想到,以最后一个元素是否被选取为状态进行DP。从线性递推的角度难以处理待修改的情况。
从分治的角度考虑,使用线段树维护区间内包含或不包含边界元素的信息,即可快速维护答案。总时间复杂度 O ( m log n ) O(m\log n) O(mlogn)。
#include <bits/stdc++.h>
using namespace std;
constexpr int MOD = 1e9 + 7;
constexpr long long INF = 1e15;
struct SegmentTree {struct Node {array<long long, 4> a;Node() : a{-INF, -INF, -INF, -INF} {}Node operator+(Node& rhs) {Node res;auto _max = [](auto& x, auto y) {x = max(x, y);};for (int i = 0; i < 4; ++i) {for (int j = 0; j < 4; ++j) {if(a[i] == -INF || rhs.a[j] == -INF) {continue;}int i1 = i / 2, i2 = i % 2;int j1 = j / 2, j2 = j % 2;if (i2 == j1 && i2 == 1) {continue;}int k1 = i1, k2 = j2;_max(res.a[k1 * 2 + k2], a[i] + rhs.a[j]);}}return res;}long long get() {long long res = -INF;for (auto x : a) {res = max(res, x);}return res;}};vector<Node> dat;SegmentTree(vector<int>& a) {int n = a.size();int k = 1;while (k < n) {k *= 2;}k *= 2;dat.resize(k);function<void(int, int, int)> init = [&](int p, int l, int r) {if (r - l == 1) {dat[p].a = {0, -INF, -INF, a[l]};return;}int m = (l + r) / 2;int chl = p * 2 + 1, chr = p * 2 + 2;init(chl, l, m);init(chr, m, r);dat[p] = dat[chl] + dat[chr];};init(0, 0, n);}void update(int a, int b, int x, int p, int l, int r) {if (a <= l && r <= b) {dat[p].a = {0, -INF, -INF, x};return;}if (r <= a || b <= l) {return;}int m = (l + r) / 2;int chl = p * 2 + 1, chr = p * 2 + 2;update(a, b, x, chl, l, m);update(a, b, x, chr, m, r);dat[p] = dat[chl] + dat[chr];}
};class Solution {public:int maximumSumSubsequence(vector<int>& nums, vector<vector<int>>& queries) {int n = nums.size();SegmentTree tr(nums);int m = queries.size();long long res = 0;for (int i = 0; i < m; ++i) {int j = queries[i][0], x = queries[i][1];tr.update(j, j + 1, x, 0, 0, n);res += tr.dat[0].get();res %= MOD;}return (res + MOD) % MOD;}
};
相关文章:
LeeCode 3165 线段树
题意 传送门 LeeCode 3165 不包含相邻元素的子序列的最大和 题解 考虑不含相邻子序列的最大和,在不带修改的情况下容易想到,以最后一个元素是否被选取为状态进行DP。从线性递推的角度难以处理待修改的情况。 从分治的角度考虑,使用线段树…...
修改元组元素
自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 场景模拟:伊米咖啡馆,由于麝香猫咖啡需求量较大,库存不足,店长想把它换成拿铁咖啡。 实例08 将麝香猫…...
【模版方法设计模式】
文章目录 模板方法设计模式模板方法的设计原则模板方法设计模式组成部分代码实现抽象类实现具体实现类执行 模板方法设计模式 模版方法设计模式(Template Method Pattern)是一种行为设计模式,它定义了一个操作中的算法骨架,而将一…...
rust语言初识
程序设计实践课上水一篇ing 来源:rust基础入门-1.初识rust-酷程网 (kucoding.com) rust作为一名新兴语言,与go又有些许不同,因为它的目标是对标系统级开发,也就是C、C这两位在编程界的位置。比如我们最常用的windows系统&#x…...
知识图谱数据预处理笔记
知识图谱数据预处理笔记 0. 引言1. 笔记1-1. \的转义1-2. 特殊符号的清理1-3. 检查结尾是否正常1-4. 检查<>是否存在1-5. 两端空格的清理1-6. 检查object内容长时是否以<开始 0. 引言 最近学习知识图谱,发现数据有很多问题,这篇笔记记录遇到的…...
Unity面试八股文之基础篇
文章目录 前言1. Unity的生命周期加载第一个场景Editor在第一次帧更新之前帧之间更新顺序协程销毁对象时退出时 2. Unity 协程和线程,进程的区别3. 本地坐标系 世界坐标系4. 碰撞器和触发器的区别后话 前言 开设这个栏目的博文会写一些有关unity的面试题目,在面试的…...
HTTPS能否避免流量劫持?如何实现HTTPS
在当今数字化时代,网站安全已经成为企业和个人的头等大事。随着网络犯罪和数据泄露的增加,保护您的网站免受潜在威胁比以往任何时候都更加重要。网站安全的一个关键组成部分是HTTPS,它代表着安全的超文本传输协议。HTTPS是标准HTTP协议的安全…...
簡述Vue 2.0 响应式数据的原理
Vue 2.0 响应式数据的原理主要基于以下几个关键点: 数据劫持与Object.defineProperty: Vue 2.0 使用 Object.defineProperty 方法来劫持对象的属性,为其添加 getter 和 setter 方法。当数据被访问或修改时,这些 getter 和 setter …...
Kafka线上集群部署方案怎么做?no.6
专栏前面几期内容,我分别从Kafka的定位、版本的变迁以及功能的演进等几个方面循序渐进地梳理了Apache Kafka的发展脉络。通过这些内容,我希望你能清晰地了解Kafka是用来做什么的,以及在实际生产环境中该如何选择Kafka版本,更快地帮…...
vscode 的 AI 协助插件 Tabnine / Codeium
4.1、Tabnine 描述:Tabnine 是一款基于深度学习技术的代码自动补全工具。该插件支持多种编程语言,包括 Python、JavaScript、TypeScript、Java 和 Go 等。它可以根据您输入的代码段和上下文信息,预测并推荐可能的代码补全选项,从而…...
Flutter 中的 OutlineButton 小部件:全面指南
Flutter 中的 OutlineButton 小部件:全面指南 在Flutter的Material Design组件库中,OutlineButton是一个用于创建带边框的扁平按钮的小部件。这种按钮通常用于次要操作或在需要强调其他按钮的情况下使用。本文将为您提供一个全面的指南,帮助…...
Kubernetes可视化界面之DashBoard
1.1 DashBoard Kubernetes Dashboard 是 Kubernetes 集群的一个开箱即用的 Web UI,提供了一种图形化的方式来管理和监视 Kubernetes 集群中的资源。它允许用户直接在浏览器中执行许多常见的 Kubernetes 管理任务,如部署应用、监控应用状态、执行故障排查…...
Docker学习(4):部署web项目
一、部署vue项目 在home目录下创建项目目录 将打包好的vue项目放入该目录下,dist是打包好的vue项目 在项目目录下,编辑default.conf 内容如下: server {listen 80;server_name localhost; # 修改为docker服务宿主机的iplocation / {r…...
驱动开发中引入私有数据的原因
系列文章目录 驱动开发中引入私有数据的原因 驱动开发中引入私有数据的原因 系列文章目录驱动开发中引入私有数据的原因 驱动开发中引入私有数据的原因 驱动开发中引入私有数据(Private Data)概念主要是为了解决以下几个关键问题: 1.多设备支…...
删除edge浏览器文本框储存记录值以及关闭自动填充
当我们点击输入框时总会出现许多以前输入过的信息。 一、删除edge浏览器文本框储存记录值 1、首先按下↓键选中你想删除的信息 二、关闭自动填充。 1、在地址栏输入edge://wallet/settings跳转到以下界面 2、往下滑找到 全部取消即可...
mysql事务 事务并发问题 隔离级别 以及原理
mysql事务 简介:事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。 事务四大特性 原子性(Atomici…...
Android 性能为王时代SparseArray和HashMap一争高下
文章目录 一、SparseArray 源码分析1. **类定义和构造函数**2. **基本方法**2.1 put(int key, E value)2.2 get(int key)2.3 delete(int key)2.4 removeAt(int index)2.5 gc()2.6 size()2.7 keyAt(int index) 和 valueAt(int index) 3. **辅助方法**3.1 binarySearch() 二、使用…...
学术图表的基本配色方法
不论是商业图表还是专业图表,图表的配色都极其关键。图表配色主要有彩色和黑白两种配色方案。刘万祥老师曾提出: “在我看来,普通图表与专业图表的差别,很大程度就体现在颜色运用上。” 对于科学图表,大部分国内的期…...
【学习笔记】Webpack5(Ⅱ)
Webpack 3、高级篇 3.1、提升开发体验 —— SourceMap 3.2、提升打包速度 3.2.1 HotModuleReplacement 3.2.2 OneOf 3.2.3 Include / Exclude 3.2.4 Cache 3.2.5 Thread 3.3、减少代码体积 …...
oracle碎片整理
1、move碎片整理 1) DECLARE tmp_val VARCHAR2 (500); BEGIN FOR REC IN (SELECT TABLE_NAME FROM USER_TABLES ) LOOP tmp_val:=ALTER TABLE || REC.TABLE_NAME || MOVE; BEGIN EXECUTE IMMEDIATE tmp_val; DBMS_OUTPUT.ENABLE(buffer_size => null); DBMS_OUTPUT.put_l…...
intv_ai_mk11新手教程:3步完成提示词输入→参数调整→结果查看
intv_ai_mk11新手教程:3步完成提示词输入→参数调整→结果查看 1. 快速了解intv_ai_mk11 intv_ai_mk11是一个基于Llama架构的文本生成模型,特别适合日常的问答、内容改写和简短创作。它就像一位随时待命的文字助手,能帮你快速完成各种文字工…...
JavaScript中全局执行上下文与函数上下文的生成过程
全局执行上下文在JS引擎启动时创建,函数执行上下文在每次调用时创建;前者作用域链仅含全局环境,后者在创建阶段就基于定义位置固定作用域链;var和function声明被提升并初始化,let/const仅注册于词法环境而处于暂时性死…...
OpenKore效率提升全攻略:自动化RO游戏的完整指南
OpenKore效率提升全攻略:自动化RO游戏的完整指南 【免费下载链接】openkore A free/open source client and automation tool for Ragnarok Online 项目地址: https://gitcode.com/gh_mirrors/op/openkore OpenKore作为一款免费开源的Ragnarok Online客户端与…...
C++ 智能指针循环引用问题剖析
C智能指针循环引用问题剖析 在现代C开发中,智能指针是管理动态内存的重要工具,能够有效避免内存泄漏。当多个智能指针相互引用时,可能形成循环依赖,导致资源无法释放。本文将深入剖析循环引用的成因、影响及解决方案,…...
PROJECT MOGFACE创意写作工坊:辅助小说大纲与角色设定生成
PROJECT MOGFACE创意写作工坊:辅助小说大纲与角色设定生成 你有没有过这样的时刻?脑子里闪过一个绝妙的点子,比如“一个AI在觉醒后,带着它的创造者亡命天涯”,但当你打开文档,准备大干一场时,却…...
5分钟解决邮件排版难题:如何用开源工具实现格式自由转换?
5分钟解决邮件排版难题:如何用开源工具实现格式自由转换? 【免费下载链接】markdown-here Google Chrome, Firefox, and Thunderbird extension that lets you write email in Markdown and render it before sending. 项目地址: https://gitcode.com/…...
【配网故障恢复+重构】主动配电网故障恢复的重构与孤岛划分统一模型Matlab实现
✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。👇 关注我领取海量matlab电子书和数学建模资料🍊个人信条:格物致知,完整Matl…...
告别Dijkstra的无力感:手把手教你用Bellman-Ford算法搞定带负权边的图(附C++代码与避坑指南)
突破Dijkstra的局限:Bellman-Ford算法在负权图中的应用实战 当我们需要在图中寻找最短路径时,Dijkstra算法通常是首选工具。然而,当图中存在负权边时,这个经典算法就会失效。想象一下网络路由中某些链路可能提供奖励积分…...
企业网络准入实战:用华三WX2540H和深信服AC搞定有线无线统一Portal认证(附OA集成)
企业级网络准入实战:华三WX2540H与深信服AC协同部署全攻略 当企业网络规模扩张到数百个终端时,传统MAC地址绑定和静态VLAN分配的管理方式就会暴露出明显短板。某制造企业IT主管张工最近就遇到了这样的困扰:研发部门的访客需要临时网络接入时&…...
第八篇:OFIRM 之 统一场论(V1.1)本来我多日前都说,我只想做个杨振宁先生就行了,基础架构有了,无数的珍珠,留给别人去捡,岂不美哉!奈何,世人质疑,那就把之前的拿出来,校对下,发出。
第八篇:OFIRM 之 统一场论(V1.1) Authors: Haiting Allen Chen Affiliations: Chen Xiao’er Creative Workshop, Independent Researcher, Guangzhou, China. Corresponding Author: Name: Haiting Allen Chen Emails: mailto: OFIRMCS…...
