- C24zhouyanchen's blog
线段树题解
- @ 2026-1-2 13:29:36
听说C24学线段树了,这不凑个热闹()

企鹅:熊大,我最近学了前缀和和差分这两种算法,他们一个拥有快速的查询,一个拥有快速的修改,但是这两个算法一个修改慢,一个查询慢,似乎不能将两者兼得,那么有没有能将两者兼得的算法呢?比如说有没有修改和查询的时间复杂度都是O(1)的算法呢?
熊大(这里是Deepseek):你的观察非常敏锐!你发现了前缀和和差分在时间效率上的权衡。但是修改和查询的时间复杂度都是O(1)的算法是不存在的,简单比喻来说:
更新像往黑箱里扔东西(很快)
查询像问黑箱里东西的总价值(要算清楚就得整理箱子,这需要时间)
要么你整理得勤快(查询快但更新慢),要么不整理(更新快但查询慢)
想同时"扔得快"又"数得快",这不可能。
企鹅:那我遇到让我"扔得比较快"又"数得比较快"的题目岂不是没招了?
熊大:折中的办法肯定是有的,比如这道题,这里用到了线段树这种数据结构。
企鹅:线段树?那它是不是储存线段的树结构?
熊大:某种意义上是的。我们先从时间复杂度优化的角度分析:常见的优化都是从O(n)优化到O(log2n),这个时间复杂度比较宽松,没准能写出来。
企鹅:log2n?这让我想到了二分,我大胆猜一下,线段树是一种二叉树吗?