当前位置: 首页 > news >正文

线段树 tricks

本文主要介绍线段树维护信息、辅助解决问题的技巧。

维护信息、打标记常见 tricks

区间加区间 gcd

\(\gcd(a,b)=\gcd(a,a-b)\),发现区间加不会影响差分数组。

考虑维护差分数组的区间 gcd,这样每次区间 \([l,r]\) 查询后和 \(a_l\) 求一下 gcd 就行了。

区间有无重复数字 / 拓展到满足和(差、积)条件的点对存在性问题

维护每个数字的出现前驱。 \(pre_i\) 表示 \(a_i\) 上一个相同数字出现在 \(pre_i\) 位置。

每次查询 \(\max_{i=l}^r pre_i \lt l\) 则代表没有重复数字。

可以拓展到求满足和(差、积)条件的点对存在性问题。好抽象的表述,我绝对不会告诉你我自己编的这个名字。

这个给道例题 P6617 查找 Search

题面求的是区间内满足和为定值 \(w\) 的点对的存在性。

可以照搬,维护每个点 \(i\) 的前面满足 \(a_j=w-a_i\)\(j\)。记为 \(pre_i\)

但是这样有问题,发现满足 \(i=pre_j\)\(j\) 不是唯一的,这样更新的时候复杂度错误。

发现存在性问题,找一个最容易的就好了。这是再所有 \(j\) 中,只有最靠近 \(i\) 的才有意义。只维护这一个就好,单点修改时只更新它,时间复杂度还是 \(O(1)\)

http://www.njgz.com.cn/news/88.html

相关文章:

  • 第一章
  • CVE-2022-41678 后台代码执行漏洞 (复现)
  • 无痕检测是否注册iMessage服务,iMessages数据筛选,iMessage蓝号检测完美实现
  • Memory Systems_ Cache, DRAM, Disk (2010)-学习笔记2-Caches, ‘Caches,’ and “Caches”
  • JAVA语言学习总结(第25天)
  • hot 100二叉树算法
  • 信号处理__FFT变换
  • LCD显示信号波形
  • 7/26
  • 7.26
  • 盛最多水的容器
  • 练习cf939A. Love Triangle
  • CVE-2023-46604 Apache ActiveMQ 远程代码执行漏洞 (复现)
  • Day26
  • 假期学习
  • 第二十四天
  • 在python虚拟环境中遇到 ​​No module named pip​​ 错误解决方案
  • 从零开始的web前端学习-React
  • tinymce富文本编辑器使用
  • 微软C语言编译器‘strcpy‘: This function or variable may be unsafe. Consider using strcpy_s instead
  • Java学习Day26
  • 线性基(个人学习笔记)
  • 花菖蒲 2025.7.26 模拟赛题解
  • 信任的意外反射:深入解析LLVM循环向量化器中的罕见编译错误
  • P1429 平面最近点对(加强版)[骗分解法]
  • 7.26 - GENGAR
  • P4565 [CTSC2018] 暴力写挂 题解
  • 第十二篇
  • 计算机网络——应用层 - 浪矢
  • 《第一节:跟着符映维学C语言---配置c语言开发环境》