核心概述

常值区间以“整段同值”的抽象表示区间 [l,r) 上值恒定,可在区间赋值/查询中配合懒标记实现对整段的 O(1) 命中与 O(log n) 更新。

原文引述

Description: Represents a segment [l,r) with a constant value. Used for lazy propagation in segment trees, interval assignment, and range queries where the whole interval has the same value. ——来源:本节点英文注释 Time: O(1) creation; O(log n) with segment tree for range assignment/query ——来源:本节点英文注释 Status: tested ——来源:本节点英文注释

展开阐述

  • 数据结构(据实现)

    • struct ConstRange {
      • ll l, r; // 区间 [l, r)
      • ll value; // 区间上的恒定值
      • bool valid; // 是否有效(未被覆盖) }
    • 或作为线段树节点扩展:
      • struct Node { ll val; bool is_const; };区间覆盖时直接赋值并标记 is_const。
  • 基本操作

    • 构造:ConstRange(l, r, v)。
    • 合并:若两相邻区间值相同,可合并为更大区间。
    • 分裂:按位置将区间拆分成子区间。
    • 覆盖:将区间标记为无效,被新覆盖的常值区间替代。
  • 延迟标记应用(线段树)

    • 区间赋值:若节点完全在目标区间内,直接 set(val) 并标记 is_const,不递归。
    • 递归时先 pushdown:若当前节点有常值标记,下推到左右子节点并清除标记。
    • 查询:若节点有常值标记,直接返回该值;否则递归合并子节点结果。
  • 优势

    • 区间赋值 O(log n),无需逐点更新。
    • 查询时若命中常值标记,O(1) 返回。
    • 大幅减少递归深度与操作次数。
  • 应用场景

    • 区间赋值、区间覆盖问题。
    • 差分约束、染色问题。
    • 并查集的区间合并(加权并查集)。
    • 字符串批量替换(区间字符统一)。
  • 实现注意

    • 标记下推(pushdown)时需更新子节点的值与标记。
    • 合并操作需处理标记优先级(常值标记优先于加法标记等)。
    • 边界条件:空区间、单点区间需特殊处理。
  • 与其他结构关系

关联节点