线段数

2025 年 1 月 9 日 星期四
/
1

线段数

最近leetcode几天每日都是线段数,看来还是逃不掉的...


本质:完全二叉树

⚠️ 构建 查询 修改 都用到了递归

作用

存放区间数据(区间最大最小值、 区间求和、 最大公因数)的二叉树结构
优化 区间的修改、维护、查询方法为 log 级别

操作(类方法)

建树

开内存(L = 4n)
递归构建 左右子节点

def __init__(self):
    #...

def build(self, **krawg):
    #...

单点修改

从根节点

def chagne(self,  **krawg):
    # ...
def update(self, i, val):
    self.chagne(i, val, **krawg)

区间修改

lazy标记: 区间的值已经更新 但子区间未更新

区间查询

  • 查询区间是否覆盖当前区间节点 (True: 返回结果 False: 到2)
  • 查询当前节点的LeftRight 与结果是否有交集 (True: 到1)
  • 合并结果

查询

  • 如果完全覆盖 直接返回
  • 如果与左或右子节点有交集 递归查询子节点

def ask2(self): # 上面 覆盖的思想
    # ...  

def query(self, **krawg):
    # ...

def ask(self): # 查询到最后
    self.querk((l, r), **krawg)

使用社交账号登录

  • Loading...
  • Loading...
  • Loading...
  • Loading...
  • Loading...