当前位置: 首页 > news >正文

【leetcode难题】2569. 更新数组后处理求和查询【线段树实现01翻转和区间求和模版】

题目截图

在这里插入图片描述

题目分析

  • 关键就是记录每次操作2时,nums1中的1的个数
  • 这就需要实现线段树进行区间反转以及区间求和

ac code

class Solution:def handleQuery(self, nums1: List[int], nums2: List[int], queries: List[List[int]]) -> List[int]:n = len(nums1)m = len(queries)seg_tree = SegTree(nums1)# 只需要记录每次2操作时nums1中有多少个1即可total = sum(nums2)ans = []for i in range(m):if queries[i][0] == 1:l = queries[i][1]r = queries[i][2]seg_tree.reverse_range(l, r)elif queries[i][0] == 2:total += seg_tree.sum_range(0, n - 1) * queries[i][1]elif queries[i][0] == 3:ans.append(total)return ansclass SegTree:def __init__(self, nums):n = len(nums)self.arr = [SegNode() for _ in range(n * 4 + 1)]self.build(1, 0, n - 1, nums)def sum_range(self, left, right):return self.query(1, left, right)def reverse_range(self, left, right):self.modify(1, left, right)def build(self, id, l, r, nums):arr = self.arrarr[id] = SegNode()arr[id].l = larr[id].r = rarr[id].lazytag = Falseif l == r:arr[id].sum = nums[l]returnmid = (l + r) >> 1self.build(2 * id, l, mid, nums)self.build(2 * id + 1, mid + 1, r, nums)arr[id].sum = arr[2 * id].sum + arr[2 * id + 1].sum# pushdown函数:下传懒标记,即将当前区间的修改情况下传到其左右孩子结点def pushdown(self, x):arr = self.arrif arr[x].lazytag:arr[2 * x].lazytag = not arr[2 * x].lazytagarr[2 * x].sum = arr[2 * x].r - arr[2 * x].l + 1 - arr[2 * x].sumarr[2 * x + 1].lazytag = not arr[2 * x + 1].lazytagarr[2 * x + 1].sum = arr[2 * x + 1].r - arr[2 * x + 1].l + 1 - arr[2 * x + 1].sumarr[x].lazytag = False# 区间修改def modify(self, id, l, r):arr = self.arrif arr[id].l >= l and arr[id].r <= r:arr[id].sum = (arr[id].r - arr[id].l + 1) - arr[id].sumarr[id].lazytag = not arr[id].lazytagreturnself.pushdown(id)mid = (arr[id].l + arr[id].r) >> 1if arr[2 * id].r >= l:self.modify(2 * id, l, r)if arr[2 * id + 1].l <= r:self.modify(2 * id + 1, l, r)arr[id].sum = arr[2 * id].sum + arr[2 * id + 1].sum# 区间查询def query(self, id, l, r):arr = self.arrif arr[id].l >= l and arr[id].r <= r:return arr[id].sumif arr[id].r < l or arr[id].l > r:return 0self.pushdown(id)mid = (arr[id].l + arr[id].r) >> 1res = 0if arr[2 * id].r >= l:res += self.query(2 * id, l, r)if arr[2 * id + 1].l <= r:res += self.query(2 * id + 1, l, r)return resclass SegNode:def __init__(self):self.l = 0self.r = 0self.sum = 0self.lazytag = False

相关文章:

【leetcode难题】2569. 更新数组后处理求和查询【线段树实现01翻转和区间求和模版】

题目截图 题目分析 关键就是记录每次操作2时&#xff0c;nums1中的1的个数这就需要实现线段树进行区间反转以及区间求和 ac code class Solution:def handleQuery(self, nums1: List[int], nums2: List[int], queries: List[List[int]]) -> List[int]:n len(nums1)m le…...

练习时长两年半的入侵检测

计算机安全的三大中心目标是&#xff1a;保密性 (Conf idential ity) 、完整性 (Integrity) 、可用性 (Availability) 。 身份认证与识别、访问控制机制、加密技术、防火墙技术等技术共同特征就是集中在系统的自身加固和防护上&#xff0c;属于静态的安全防御技术&#xff0c;…...

【弹力设计篇】聊聊隔离设计

为什么需要隔离设计 隔离其实就是Bulkheads&#xff0c;隔板。在生活中隔板的应用主要在船舱中进行设计&#xff0c;目的是为了避免因一处漏水导致整个船都沉下去。可以将故障减少在一定的范围内&#xff0c;而不是整个船体。 从架构演变来说的话&#xff0c;大多数系统都是从…...

MFC 透明窗体

如何制作透明窗体 &#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f; 使用SetLayeredWindowAttributes可以方便的制作透明窗体&#xff0c;此函数在w2k以上才支持,而且如果希望直接使用的话&#xff0c;可能需要下载最新的SDK。不过此函数在w2k的user32.dll里有实…...

C++笔记之vector的resize()和clear()用法

C笔记之vector的resize()和clear()用法 code review! 文章目录 C笔记之vector的resize()和clear()用法1.resize()2.clear() 1.resize() 运行 2.clear() 运行...

Vue2基础九、路由

零、文章目录 Vue2基础九、路由 1、单页应用 &#xff08;1&#xff09;单页应用是什么 单页面应用(SPA&#xff1a;Single Page Application): 所有功能在 一个html页面 上实现具体示例: 网易云音乐 https://music.163.com/ &#xff08;2&#xff09;单页面应用VS多页面…...

移动零——力扣283

题目描述 双指针 class Solution{ public:void moveZeroes(vector<int>& nums){int n nums.size(), left0, right0;while(right<n){if(nums[right]){swap(nums[right], nums[left]);left;}right;}} };...

Transformer+MIA Future Work

TransformerMIA Future Work 主要的挑战和未来发展分为三个部分&#xff0c;即 1、特征集成和计算成本降低、 2、数据增强和数据集收集、 3、学习方式和模态-对象分布 1、特征集成和计算成本降低 为了同时捕获局部和全局特征来提高模型性能&#xff0c;目前大多数工作只是…...

深度学习入门(二):神经网络整体架构

一、前向传播 作用于每一层的输入&#xff0c;通过逐层计算得到输出结果 二、反向传播 作用于网络输出&#xff0c;通过计算梯度由深到浅更新网络参数 三、整体架构 层次结构&#xff1a;逐层变换数据 神经元&#xff1a;数据量、矩阵大小&#xff08;代表输入特征的数量…...

rust 配置

rustup 镜像 在 cmd 中输入以下代码&#xff0c;设置环境变量 setx RUSTUP_UPDATE_ROOT https://mirrors.tuna.tsinghua.edu.cn/rustup/rustup setx RUSTUP_DIST_SERVER https://mirrors.tuna.tsinghua.edu.cn/rustupcrates.io 索引镜像 在 C:\Users\用户名\.cargo\config 文…...

文心一言 VS 讯飞星火 VS chatgpt (67)-- 算法导论6.5 6题

文心一言 VS 讯飞星火 VS chatgpt &#xff08;67&#xff09;-- 算法导论6.5 6题 六、在 HEAP-INCREASE-KEY 的第 5 行的交换操作中&#xff0c;一般需要通过三次赋值来完成。想一想如何利用INSERTION-SORT 内循环部分的思想&#xff0c;只用一次赋值就完成这一交换操作? 文…...

6、Kubernetes核心技术 - Pod

目录 一、概述 二、Pod机制 2.1、共享网络 2.2、共享存储 三、Pod资源清单 四、 Pod 的分类 五、Pod阶段 六、Pod 镜像拉取策略 ImagePullBackOff 七、Pod 资源限制 八、容器重启策略 一、概述 Pod 是可以在 Kubernetes 中创建和管理的、最小的可部署的计算单元。P…...

VlanIf虚拟接口 通信技术(二十三课)

一 Vlan技术之间的通信 单臂路由(One-Arm Routing)是一种网络架构设计方式,通常用于部署网络设备(如防火墙、负载均衡器等)实现网络流量控制和安全策略。在单臂路由中,网络设备只有一个物理接口与局域网(LAN)或广域网(WAN)相连。 1.2 交换机 数据链路层 (第二层)…...

图神经网络(GNN)入门学习笔记(直观且简单)

文章目录 图的定义和表示可以使用图数据结构的问题将图结构用于机器学习的挑战最基本的图神经网络概述汇聚操作基于信息传递的改进图神经网络全局向量信息的利用 本篇文章参考发表于Distill上的图神经网络入门博客&#xff1a; A Gentle Introduction to Graph Neural Network…...

【Java开发】 Mybatis-Flex 01:快速入门

Mybatis 作为头部的 ORM 框架&#xff0c;他的增强工具可谓层出不穷&#xff0c;比如出名的 Mybatis-Plus 和 阿里云开源的 Fluent-MyBatis&#xff0c;如今出了一款 Mybatis-Flex &#xff0c;相比前两款功能更为强大、性能更为强悍&#xff0c;不妨来了解一下。 目录 1 Myba…...

企业级业务架构学习笔记<二>

一.业务架构基础 业务架构的定义 以实现企业战略为目标&#xff0c;构建企业整体业务能力规划并将其传导给技术实现端的结构化企业能力分析方法 (业务架构可以从企业战略触发&#xff0c;按照企业战略设计业务及业务过程&#xff0c;业务过程时需要业务能力支撑的&#xff0…...

Minio在windows环境配置https访问

minio启动后&#xff0c;默认访问方式为http&#xff0c;但是有的时候我们的访问场景必须是https&#xff0c;浏览器有的会默认以https进行访问&#xff0c;这个时候就需要我们进行配置上的调整&#xff0c;将minio从http访问升级到https。而查看minio的官方文档&#xff0c;并…...

安装JDK环境(Windows+Linux双教程)

今日一语&#xff1a;今天的事情不去做&#xff0c;到了明天就成了麻烦&#xff0c;到了下个月就成了隐患&#xff0c;到了明年只剩下悔恨和惋惜 Linux 从Oracle网站下载linux的rpm包java -version 查询java环境是否已经安装 如果已经安装&#xff0c;可以选择卸载重装或者直接…...

SVG图标,SVG symbols,SVG use标签

SVG图标&#xff0c;SVG symbols 项目中图标的使用&#xff0c;趋势是使用svg作图标的&#xff0c;优点如下 兼容现有图片能力前提还支持矢量 可读性好&#xff0c;有利于SEO与无障碍 在性能和维护性方面也比iconfont要强很多 怎么在项目中优雅的使用svg图标&#xff0c;下面…...

常用css 笔记

0、定义变量 :root { --primary-color: #007bff;} .button { background-color: var(--primary-color);} 1、水平垂直居中 div {width: 100px;height: 100px;position: absolute;top: 0;right: 0;bottom: 0;left: 0;margin: auto; }父级控制子集居中 .parent {display: fle…...

【WEB模型】CS架构BS架构HTMLCSSJS

一、CS架构 - Client/Server 客户端/服务器pc安装软件&#xff1a;安卓应用、ios应用需要安装专门软件才能用&#xff0c;软件直接跟服务器通信开发成本高&#xff0c;各个平台都有对应的开发工程师好处&#xff1a;功能强大二、BS架构 - Browser/Server 浏览器/服务器不需要安…...

AI报告文档审核助力本地化升级:IACheck如何支撑食品加工行业数据安全与质量协同发展

在食品加工行业不断强化质量控制与数据安全要求的背景之下&#xff0c;“本地部署”正逐渐成为企业数字化转型中的关键路径之一&#xff0c;尤其是在涉及检测数据与质量报告的场景中&#xff0c;数据不仅需要具备高度准确性&#xff0c;还必须满足合规与安全要求&#xff0c;因…...

ReplaceItems:批量设计元素智能替换引擎 — 献给追求极致效率的UI设计师

ReplaceItems&#xff1a;批量设计元素智能替换引擎 — 献给追求极致效率的UI设计师 【免费下载链接】illustrator-scripts Adobe Illustrator scripts 项目地址: https://gitcode.com/gh_mirrors/il/illustrator-scripts 设计效率瓶颈诊断&#xff1a;为何手动替换如此…...

技术洞察:zyfun如何重构跨平台视频播放体验

技术洞察&#xff1a;zyfun如何重构跨平台视频播放体验 【免费下载链接】zyfun 跨平台桌面端视频资源播放器,免费高颜值. 项目地址: https://gitcode.com/gh_mirrors/zy/zyfun 在数字娱乐快速发展的今天&#xff0c;跨平台视频播放器面临着系统兼容性、性能优化和用户体…...

量子计算入门捷径:在快马平台用qorder实现第一个纠缠态实验

量子计算听起来很高深&#xff0c;但有了合适的工具和平台&#xff0c;入门其实比想象中简单。最近我在InsCode(快马)平台上尝试用qorder框架做了第一个量子纠缠实验&#xff0c;发现整个过程就像搭积木一样直观。下面分享我的学习笔记&#xff0c;希望能帮到同样想入门的朋友。…...

Java八股文实践篇:从理论到DeOldify项目中的设计模式应用

Java八股文实践篇&#xff1a;从理论到DeOldify项目中的设计模式应用 每次面试被问到设计模式&#xff0c;是不是都只能背出“单例模式确保一个类只有一个实例”这样的标准答案&#xff1f;背得滚瓜烂熟&#xff0c;但一上手写代码&#xff0c;还是觉得这些模式离自己很远&…...

EmbeddingGemma-300m部署指南:Ollama镜像+Prometheus监控+日志追踪一体化

EmbeddingGemma-300m部署指南&#xff1a;Ollama镜像Prometheus监控日志追踪一体化 想快速搭建一个功能强大、易于管理的文本向量化服务吗&#xff1f;EmbeddingGemma-300m作为谷歌推出的轻量级嵌入模型&#xff0c;凭借其3亿参数和出色的性能&#xff0c;是构建本地语义搜索、…...

Potree 点云可视化实战指南:从基础配置到高级测量技巧

1. Potree点云可视化入门指南 第一次接触Potree时&#xff0c;我被它处理海量点云数据的能力震撼到了。这个基于WebGL的开源库&#xff0c;能让普通浏览器流畅渲染上亿级别的点云数据。想象一下&#xff0c;不用安装专业软件&#xff0c;打开网页就能查看精细的激光扫描模型&am…...

DeepSeek风格迁移降AI怎么用?从0到1完整操作教程

第一次操作的话&#xff0c;照着下面的步骤来&#xff0c;15分钟内搞定DeepSeek风格迁移降AI、降AI、降AIGC率。 工具选嘎嘎降AI&#xff08;www.aigcleaner.com&#xff09;&#xff0c;达标率99.26%&#xff0c;有退款保障&#xff0c;操作也不复杂。 准备工作 需要准备的&…...

从apt-get到yum:Ubuntu20.04下跨平台包管理工具安装指南

从apt-get到yum&#xff1a;Ubuntu 20.04下跨平台包管理工具实战指南 在Linux生态中&#xff0c;不同发行版采用不同的包管理系统——Debian系的apt与RedHat系的yum就是典型代表。当开发者需要在Ubuntu环境下运行原本为CentOS设计的软件时&#xff0c;掌握yum的安装与配置技巧能…...