首页 > 其他分享 >线段树乱搞大法

线段树乱搞大法

时间:2024-02-23 22:22:06浏览次数:25  
标签:大法 树套 标记 线段 min 乱搞 区间 mx

线段树乱搞大法

Part1

普通线段树

简单的区间或单点问题,支持四则运算(可以扩展成可合并的信息,如hash)

权值线段树

每个节点维护值域为\([l,r]\)的个数,可以维护全局第k大(线段树二分),

zkw线段树

...

Part2

懒标记

区间操作,历史版本最值/和

标记永久化

区间操作,单点修改

要求:操作顺序不影响答案(所以乘除法,历史版本最值不能用)

Part3

主席树(可持久化线段树)

可持久化普通线段树:查询历史版本

可持久化权值线段树:区间第k大(不带修)

树套树

线段树套线段树

要求外层线段树支持标记永久化,内层可以支持懒标记

log^2

树状数组套线段树

要求答案可加减,线段树可合并

树状数组先把区间找到,然后线段树的时候每个节点就对着logn个,合并起来算答案(所以一般是权值线段树)

线段树套主席树

...

李超线段树

节点维护区间中点的最高线段,然后对于每个被完全覆盖的区间(最多logn个),分类讨论:左右儿子只用下传一个

log^2

吉司机线段树

支持区间取min/max,区间和sum

以区间\(min(x,a_i)\)为例子,记录区间最大值mx,次大值se,最大值个数cnt,懒标记

如果x>mx,不用进区间

如果x>se,只用修改最大值,sum+=(x-mx),mx=x,懒标记

否则下传两个儿子

如果要打区间加,就要两个懒标记,要注意先下传加标记(下传时要给取min懒标记,mx,se也++),再下传取min懒标记

兔队线段树

猫树

...

Part4

线段树合并

线段树分裂

线段树分治

线段树分治&cdq分治&整体二分

线段树二分

EX

1第k大

全局第k大->区间第k大(不带修)->区间第k大(带修)

权值线段树->主席树->树套树

2线段树&离线

GSS2离线,然后历史版本最小值

3线段树维护奇怪信息

CF1209G2以最小值为断点,维护各区间众数数量和

标签:大法,树套,标记,线段,min,乱搞,区间,mx
From: https://www.cnblogs.com/zhy114514/p/18028189

相关文章

  • UOJ228/HDU5828 基础数据结构练习题/Rikka with Sequence 题解(势能线段树)
    势能线段树。如果线段树上一个节点的\(\max-\min\ge2\),我们称其为关键节点,考虑定义势能\(\phi\)为线段树上关键节点的个数。对于每次开方操作,如果当前节点为关键节点,则暴力递归左右儿子修改,否则:如果当前节点\(\max=\min\)或\(\max=\min+1\)且\(\max\)不是完全平方数,......
  • 山海经(线段树)题解
    原题链接:COGS775题目描述:“南山之首曰鹊山。其首曰招摇之山,临于西海之上,多桂,多金玉。有草焉,其状如韭而青华,其名曰祝余,食之不饥……又东三百里,曰堂庭之山,多棪木,多白猿,多水玉,多黄金。又东三百八十里,曰猨翼之山,其中多怪兽,水多怪鱼,多白玉,多蝮虫,多怪蛇,名怪木,不可以上。……”(其实就......
  • 线段树模板
    向上回溯voidpushup(intrt){ t[rt].sum+=t[lc].sum+t[rc].sum; t[rt].mx=max(t[lc].mx,t[rc].mx);}建树voidbuild(intrt,intl,intr){ t[rt].l=l; t[rt].r=r; if(l==r){ t[rt].mx=t[rt].sum=a[l]; return; } intmid=(l+r)>>1......
  • 洛谷题单指南-贪心-P1803 凌乱的yyy / 线段覆盖
    原题链接:https://www.luogu.com.cn/problem/P1803题意解读:通过某种贪心策略,使得能参加的比赛数越多越好。解题思路:将比赛按照结束时间由小到大哦排序,贪心策略是优先选择结束时间早的比赛,因为这样能保证后面参加更多其他比赛100分代码:#include<bits/stdc++.h>usingnamespa......
  • 山海经&&Atcoder Alternating String (线段树)
    前言:为什么把他们放在一起?因为我发现把pushup向上回溯放结构体类型函数里比较方便并且这两题确实也有相同思想山海经这题分三种情况左子树前缀和+右子树前缀和2.右子树后缀和与右总区间+左子树3.左区间最大子段与右区间最大子段与左后缀与右前缀特别要注意......
  • 线段树学习笔记
    目录线段树的基础知识什么是线段树线段树的基本操作线段树的建树线段树的单点修改线段树的区间查询线段树的区间修改模板动态开点一些例题TheChildandSequence解法分析CodeLegacy相关知识:线段树优化建图解法分析Code线段树的基础知识什么是线段树线段树是一种分治思想的二叉......
  • 小清新线段树
    小清新线段树定义结合时间复杂度分析(势能分析)以及懒标记应用的非传统线段树可以理解为带剪枝的线段树复杂度证明以TheChildandSequence为例,先看操作1,2,对于一个数\(x\)进行取模,要么这个数保持不变。若模数\(M>\frac{x}{2}\),则剩余部分小于\(\frac{x}{2}\);若模数\(......
  • 线段树
    线段树是一种基于分治思想的二叉树结构,用于在区间上进行信息统计。线段树的每个节点都代表一个区间线段树具有唯一的根节点,代表的区间是整个统计范围,如[1,n]线段树的每个叶节点都代表一个长度为1的元区间对于每个内部节点[l,r],它的左子节点是[l,mid],右子节点是[mid+1,r],其中m......
  • 线段树—模板
    线段树常见操作build建树update更新query查询pushup向上回溯pushdown向下延迟更新(延迟标记)建线段树://预编译命令,做符号代换#definelson(gjd<<1)#definerson(gjd<<1|1)//gjd表示当前结点,[l,r]表示区间范围voidbuild(intgjd,intl,intr){tree[gjd]......
  • [COGS 755]山海经:线段树
    这是一道美妙的线段树板子,能够有效地提升我们的读题,理解,思考和代码能力;综上,这是一道大模拟显然,对于这道题的数据范围,直接暴力是行不通的,只能拿30分:30分暴力#include<bits/stdc++.h>usingnamespacestd;constintN=1000005;constintinf=0x7fffffff;structtree{ int......