首页 > 其他分享 >吉司机线段树

吉司机线段树

时间:2023-03-24 20:45:52浏览次数:39  
标签:Ai 线段 累加 司机 tag 区间 最大值

吉司机线段树

线段树3 https://www.luogu.com.cn/problem/P6242

Q1.对于所有的i∈[l,r],将Ai加上 k(k 可以为负数)

  对于k的值,我们分类讨论,讨论其对区间最大值的影响
  	1)k==0 无影响
  	2)k<0 正常加上即可
        3)k>0,只有这种情况可能会对最大值结果产生影响

  我们考虑用 Tag1 来维护,显然当 Tag1 累计到最大后,下传给 son
  区间 son 的最大值加上对应 Tag[1] ,才可能可以使 son 的 mx 最大,才有可能更新为历史最大
  再用一个 Tag2 维护先前出现的【最大的 Tag1 】,以便更新B数组
  总结一下:
  tag 大致上可以分成2类:
  	1.区间累加标记  2.历史区间最大累加标记
  再考虑区间内最大值与非最大值之间的关系可能发生转换,
  tag 又可以分成:
  	1.区间最大累加值的标记 2.区间非最大值的累加标记
  具体就有了 Summary 中的4种 Lzay_tag

*Q2.对于所有的i∈[l,r],将Ai变成 min(Ai,v)

  我们考虑维护线段树对应节点的:区间最大值mx、严格次大值se、最大值的个数cnt
  if(v>=mx) 不用修改
  if(se<v<mx) 区间和 sum-=(mx-v)*cnt ,mx更新为v,打上区间最大值加减标记
  if(x<=se) 不能直接更新,对lson与rson进行递归搜索,结果合并到当前节点

Q3.求 ∑i=[l,r]Ai

  线段树基操,省略

Q4.对于所有的i∈[l,r],求Ai的最大值 & 5.对于所有的i∈[l,r]求Bi的最大值

  其中最为区间历史最大值的 Bi 较为难求,采用Lzay_tag的方式维护,维护方式见1与2

Summary:

总共要维护的是四个Lazy_tag

  1.区间历史最大累计和的tag
  2.区间非最大值的历史最大累计和的tag
  3.区间最大值累加的tag
  4.区间非最大值的累加的tag

标签:Ai,线段,累加,司机,tag,区间,最大值
From: https://www.cnblogs.com/Diamondan/p/17253260.html

相关文章

  • bzoj 2006 [NOI2010] 超级钢琴 线段树求区间极值+优先队列
    挺神奇的一道题,唯一想不通的是为什么放在主席树的题单里..首先暴力找出所有的合法区间显然是不可能的。考虑怎么贪心,假如固定每个L作为左端点,那么合法的区间就是[L+l-1,L......
  • 2023年中国传媒大学程序设计大赛 G.跳台滑雪 线段树
    传送门#include<iostream>#include<cstring>#include<iomanip>#include<algorithm>#include<stack>#include<queue>#include<numeric>#include<cassert>#......
  • Vue+Openlayers实现绘制线段并测量距离显示
    场景在上面已经实现交互式绘制线段基础上,怎样实现测量距离。注:关注公众号霸道的程序猿获取编程相关电子书、教程推送与免费下载。实现1、页面上添加按钮与map<template>......
  • CAD如何检查线是否连接?CAD线段连接检查技巧
    在CAD制图过程中,当需要生成填充、计算面积和生成面域时,偶尔会遇到区域未封闭的情况。此时便需要检查图纸中的CAD线段连接状态,那CAD如何检查线是否连接呢?本文小编就来给大家......
  • 【Unity3D】使用GL绘制线段
    1前言​线段渲染器LineRenderer、拖尾TrailRenderer、绘制物体表面三角形网格从不同角度介绍了绘制线段的方法,本文再介绍一种新的绘制线段的方法:使用GL绘制线段。......
  • [DS记录] 线段树 Beats
    0.前言所谓线段树Beats,就是吉老师打出来的线段树。1.基本操作P6242线段树3区间加区间取min区间最大值区间和区间历史最大值首先考虑134咋做。就......
  • [浅谈] 线段树优化建边
    \(\color{purple}\text{P6348[PA2011]Journeys}\)\(\color{green}\text{2023.1.1010:58}\)线段树优化建边。题意:给定一个图,每次对区间\([a,b]\)至区间\([c,d]\)建......
  • 线段树模板
    扫描线#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;constintN=4e5+10;intread(){ intx=0,f=1;charc=getchar(); while(c>'9'||c<'0')......
  • 线段树全解
    前言线段树,维护区间修改的利器,种类繁多。以其码量巨大的特点骇人听闻。\(OIerhhx\)为了让线段树的使用方便更加方便简洁,不再苦恼,于是写下了这篇博客。线段树伪代码指南......
  • 动态开点线段数 & 线段数合并学习笔记
    动态开点线段树使用场景\(4\timesn\)开不下。值域需要平移(有负数)。什么时候开点显然,访问的节点不存在时(只会在修改递归时开点)。trick区间里面有负数时,\(mid=......