Martian148's blog Martian148's blog
首页
  • ICPC 算法笔记
  • ICPC 算法题解
  • 体系结构
  • 高等数学
  • 线性代数
  • 概率论与数理统计
  • 具体数学
  • Martian148的奇思妙想
  • 游记
  • 通识课笔记
关于
  • useful 网站
  • 友情链接
  • 分类
  • 归档

Martian148

一只热爱文科的理科生
首页
  • ICPC 算法笔记
  • ICPC 算法题解
  • 体系结构
  • 高等数学
  • 线性代数
  • 概率论与数理统计
  • 具体数学
  • Martian148的奇思妙想
  • 游记
  • 通识课笔记
关于
  • useful 网站
  • 友情链接
  • 分类
  • 归档
  • 线上赛板子(实时更新)
  • 数据结构

  • 数学

  • 计算几何

  • 动态规划

  • 图论

  • 字符串

  • 杂项

    • 01分数规划
    • 莫队
    • CDQ分治
    • 离散化
    • RMQ
    • 悬线法
      • 简介
      • 实现
    • 模拟退火
    • 整体二分
    • Blog 对拍 Debug 复杂度
  • 算法笔记
  • 杂项
martian148
2024-09-03
目录

悬线法

# 悬线法

# 简介

悬线法能解决的问题用单调栈也可以解决

但是悬线法比较简单

我以前学的好像叫极大化(bushi)

可以解决一些最大矩阵的问题

image.png

# 实现

我们定义 LiL_iLi​ 表示有 aia_iai​ 这个高度的一根悬线,往左最多能平移到什么位置

初始化显然,ai=ia_i=iai​=i

考虑转移

  • 如果当前 li=1l_i=1li​=1 则已经扩展到了
  • 如果当前 ai>ali−1a_i > a_{l_i-1}ai​>ali​−1​ 则从当前悬线不能平移到 Li−1L_i-1Li​−1
  • 如果当前 ai≤ali−1a_i \le a_{l_i-1}ai​≤ali​−1​ 则当前悬线能平移到 Li−1Li-1Li−1 往左边平移到的最远的地方

通过摊还分析,可以证明,每个 lil_ili​ 最多会被其他的 ljl_jlj​ 遍历一次,因此时间复杂度为 O(n)O(n)O(n)

上次更新: 2025/04/08, 18:03:31
RMQ
模拟退火

← RMQ 模拟退火→

最近更新
01
Java基础语法
05-26
02
开发环境配置
05-26
03
pink 老师 JavaScript 学习笔记
05-26
更多文章>
Theme by Vdoing | Copyright © 2024-2025 Martian148 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式