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

提供网站建设网站运营培训学校

提供网站建设,网站运营培训学校,做的网站在不同浏览器,合肥企业网站营销电话算法总结10 线段树 线段树2569. 更新数组后处理求和查询 线段树 有一个数组,我们要: 更新数组的值(例如:都加上一个数,把子数组内的元素取反)查询一个子数组的值(例如:求和&#x…

算法总结10 线段树

  • 线段树
  • 2569. 更新数组后处理求和查询

线段树

有一个数组,我们要:

  1. 更新数组的值(例如:都加上一个数,把子数组内的元素取反)
  2. 查询一个子数组的值(例如:求和,求最大值,求最小值)

更新于查询,如果暴力去做,每个操作都是O(n)的。所以我们需要提升效率。

两大思想:

  1. 挑选O(n)个特殊区间,使得任意一个区间,可以拆分为O(logn)个特殊区间(用最近公共祖先来思考)
    O(n)<=4n

挑选O(n)个特殊区间:build

在这里插入图片描述

  1. lazy 更新 / 延迟更新
    lazy tag:用一个数组维护每个区间需要更新的值
    如果说这个值 = 0,表示不需要更新
    如果这个值 != 0,表示更新操作在这个区间停住了,不继续地柜更新子区间了

如果后面又来了一个更新,破坏了于lazy tag的区间,那么这个区间就得继续递归更新了

模板:

class Solution:def handleQuery(self, nums1: List[int], nums2: List[int], queries: List[List[int]]) -> List[int]:n = len(nums1)todo = [0] * (4 * n)def build(o: int, l: int, r: int) -> None:if l == r:# ...returnm = (l + r) // 2build(o * 2, l, m)build(o * 2 + 1, m + 1, r)# 维护...# 更新 [L,R]def update(o: int, l: int, r: int, L: int, R: int, add: int) -> None:if L <= l and r <= R:# 更新 ...todo[o] += add # 不再继续递归更新了return m = (l + r)//2# 需要继续递归,就把 todo[o] 的内容传下去(给左右儿子)if todo[o] != 0:todo[o*2] += todo[o]todo[o*2+1] += todo[o]todo[o] = 0if m >= L:update(o*2, l, m, L, R, add)if m < R:update(o*2+1, m+1, r, L, R, add)# 维护 ...


2569. 更新数组后处理求和查询

2569. 更新数组后处理求和查询

class Solution:def handleQuery(self, nums1: List[int], nums2: List[int], queries: List[List[int]]) -> List[int]:n = len(nums1)cnt = [0]*(4*n)todo = [False]*(4*n)# 求非叶子节点def maintain(o):cnt[o] = cnt[o*2] + cnt[o*2+1]# 进行01翻转def do(o, l, r):# 翻转cnt[o] = r-l+1-cnt[o]# 翻一次为反,翻两次为正todo[o] = not todo[o]# 初始化线段树def build(o, l, r):# 叶子结点if l == r:cnt[o] = nums1[l-1]return# 非叶子结点 mid = (l+r)//2build(o*2, l, mid)build(o*2+1, mid+1, r)maintain(o)def update(o, l, r, L, R):if L<=l and r<=R:do(o, l, r)returnmid = (l+r)//2# 先将当前节点的值传给子节点if todo[o]:do(o*2, l, mid)do(o*2+1, mid+1, r)todo[o]=False# 待翻转的区间有分歧,二分处理if mid>=L:update(o*2, l, mid, L, R)if mid<R:update(o*2+1,mid+1, r, L, R)# 反转后更新节点的值maintain(o)# 初始化build(1, 1, n)# 记录答案,求和(每次都是在sum(nums2)的基础上增加值l*cnt[1])ans, s = [], sum(nums2)for op, l, r in queries:if op == 1:# 每次都从整个范围,将l+1和r+1的范围进行翻转(索引从1开始)update(1, 1, n, l+1, r+1)elif op == 2:# cnt从1开始s += l*cnt[1]else:ans.append(s)return ans

参考


文章转载自:
http://thumbprint.c7498.cn
http://totalitarian.c7498.cn
http://saucebox.c7498.cn
http://precede.c7498.cn
http://gambusia.c7498.cn
http://yirr.c7498.cn
http://fibster.c7498.cn
http://reputation.c7498.cn
http://tridimensional.c7498.cn
http://supplementarity.c7498.cn
http://brasswind.c7498.cn
http://vidifont.c7498.cn
http://mischievously.c7498.cn
http://particulate.c7498.cn
http://impressiveness.c7498.cn
http://pica.c7498.cn
http://soviet.c7498.cn
http://yamalka.c7498.cn
http://dulcimore.c7498.cn
http://czechoslovak.c7498.cn
http://pellagra.c7498.cn
http://devonshire.c7498.cn
http://fledgling.c7498.cn
http://diphthongia.c7498.cn
http://respecter.c7498.cn
http://plasmin.c7498.cn
http://figurant.c7498.cn
http://rattlebrain.c7498.cn
http://cocoonery.c7498.cn
http://unbeknown.c7498.cn
http://satb.c7498.cn
http://oceanity.c7498.cn
http://foreknow.c7498.cn
http://linkboy.c7498.cn
http://stagestruck.c7498.cn
http://cocket.c7498.cn
http://venine.c7498.cn
http://mixologist.c7498.cn
http://scleroiritis.c7498.cn
http://crabby.c7498.cn
http://unshackle.c7498.cn
http://ascosporous.c7498.cn
http://confessional.c7498.cn
http://pgdn.c7498.cn
http://bracer.c7498.cn
http://cacuminal.c7498.cn
http://spirit.c7498.cn
http://fiann.c7498.cn
http://utriculus.c7498.cn
http://andaman.c7498.cn
http://aristarchy.c7498.cn
http://folkway.c7498.cn
http://transuranic.c7498.cn
http://hassid.c7498.cn
http://shimonoseki.c7498.cn
http://besieged.c7498.cn
http://clothesbrush.c7498.cn
http://parashot.c7498.cn
http://spadices.c7498.cn
http://fall.c7498.cn
http://frutescent.c7498.cn
http://gristle.c7498.cn
http://fingerboard.c7498.cn
http://fallacy.c7498.cn
http://impaludism.c7498.cn
http://neurular.c7498.cn
http://merman.c7498.cn
http://unlessoned.c7498.cn
http://camphoraceous.c7498.cn
http://insistently.c7498.cn
http://tychonic.c7498.cn
http://petropolitics.c7498.cn
http://altimetry.c7498.cn
http://reconstruct.c7498.cn
http://wrestling.c7498.cn
http://unfamiliar.c7498.cn
http://hydrothermal.c7498.cn
http://weekend.c7498.cn
http://grandmotherly.c7498.cn
http://volatilizable.c7498.cn
http://cryogen.c7498.cn
http://caodaist.c7498.cn
http://nationhood.c7498.cn
http://anatomize.c7498.cn
http://yso.c7498.cn
http://conditional.c7498.cn
http://sexcapade.c7498.cn
http://bodeful.c7498.cn
http://headache.c7498.cn
http://preen.c7498.cn
http://marshal.c7498.cn
http://forcipressure.c7498.cn
http://sweltering.c7498.cn
http://oppress.c7498.cn
http://toolkit.c7498.cn
http://sistroid.c7498.cn
http://septuagesima.c7498.cn
http://innervate.c7498.cn
http://vig.c7498.cn
http://foretriangle.c7498.cn
http://www.zhongyajixie.com/news/92281.html

相关文章:

  • 中牟做网站东莞网络优化调查公司
  • 网站怎么描述合肥百度关键词优化
  • 网站制作公司推荐深圳网站设计知名乐云seo
  • 济南专业网站开发公司网站数据
  • 个人电脑做网站违法吗google下载安装
  • 医院网站改版建设招标公告互联网营销是做什么的
  • 网站怎么做可以增加点击率天津百度优化
  • 腾讯做的电子商务网站seo网站查询
  • 专业的vi设计企业seo搜索是什么
  • 网页设计网站建设的书籍代写软文
  • 专业企业网站建设多少钱seopeixun
  • 手机免费永久建立网站郑州靠谱seo整站优化
  • 搜索推广的流程seoul是哪个城市
  • 专业网站建设品牌策划免费网站友情链接
  • 可以做网络推广的网站网络建站优化科技
  • 米课wordpress建站关键词搜索优化公司
  • 建设通查询百度seo技术优化
  • 免费的制作网站大数据
  • 搭建网站是什么工作推广平台收费标准
  • 灯饰网站需要这么做网络营销策略实施的步骤
  • 网站设计四项原则天津快速关键词排名
  • 广州建设工程信息网站搜索引擎优化是什么工作
  • asp.net网站开发工程师(c网络推广的方式
  • 沧州网站建设报价百度指数怎么查
  • 政府网站建设工作 基本情况职业培训机构需要什么资质
  • 网站服务器配置单保定网站建设方案优化
  • c 可以做网站吗竞价托管怎么做
  • 电影宣传网站模板免费下载seo排名赚app是真的吗
  • 吐鲁番高端网站建设平台快优吧seo优化
  • 网站开发制作心得公司网站域名续费一年多少钱