这是699.左代码上的下降块很难。
标签:“线截面树(动态开放点)”,“线段树”
在无限的长轴(即轴)上,我们根据给定的顺序将相应的正方形放置。
i掉落块()是一个正方形,它指示块()的最左点的位置,指示块()的侧面长度。
每个块的底部边缘平行于轴(即轴),并从高度降低到当前土地的高度。先前的正方形结束并保持静态后,它开始掉落一个新的块。
块的底部边缘具有非常大的粘度,并且将保持在其接触的任何长度的表面(无论是几个轴还是其他块)。相邻和落下的边缘不会过早地粘在一起,因为只有底部边缘很粘。
返回一堆高度列表。每个高度堆栈表明,指示块的倒塌结束后,当前堆叠了所有由固定块堆叠的最高高度。
示例1:
示例2:
注意:
为了方便起见,我们用他们的手指。
每个插入操作都带有查询,因此查询数量为$ 13 $,左端点的最大值为$ 10E8 $,边缘长度的最大值为$ 16 $。超过$ 1E9 $。
对于众多价值域的间隔和问题,但是查询数量有限,可以用几种方法来解决常见的“价值域爆炸,有限的查询”间隔问题的问题?
我的个人习惯通常使用“离散 +线程树”,或者要么使用“线树(动态开放点)”来解决方案。
此标题是“非顾问在线”,因此您可以首先离散数组,将值域映射到较小的空间,然后应用线段树以求解占$ 4 imes n $空间的线段树。
但是,更灵活的解决方案(能够同时应对强制性在线问题)是“线树(动态开放点)”。
有两种方法可以同时实现动态开头:
方法1关于每日问题的不久933。最新的请求数,所以我今天写了该方法。
具体来说,我们将订单的操作按顺序进行(假设当前块的左端为$ a $,而边缘长度为$ len $,那么有一个右端到$ b = a + len$)。
因此,这本质上是“间隔修改+间隔查询”的问题。我们需要使用“懒惰标签”实现线树,以确保“间隔修改”的复杂性仍然为$ O(log {n})$ ESSENCE
此外,还有一个细节需要注意:不同块之间的边缘可以重叠,但不会导致块叠加。因此,当我们操作一个间隔$ [a,b] $的(查询或插入)时,我们可以使用它,我们可以使用它,我们可以使用它,我们可以使用它,我们可以使用它,我们可以使用它,我们可以使用它,可以使用它。它已调整为$ [a,b -1] $,从而解决了边缘覆盖操作高度的错误问题。
估计点的基本方法在正面?详细解决了常见的“价值域爆炸,查询有限”间隔问题的几种方法。
简而言之,您可以直接估计$ 6 imes m imes log {n} $,其中$ m $是查询数(相应问题的长度),而$ n $是值域的大小(与此问题相对应可以直接将其直接引入。$ 1E9 $);另一个更实用的(避免估计)估计点方法可以“尽可能多地打开”,并使用我们创建的主题和大小(结构)的空间大小。字节,或者如果结构太大,则可以将1.28亿美元的$开放至$ 5 IMES 10^6 $或更多)。
代码:
由“动态指针”实现的“动态开放点”可以有效地避免数组估计的问题。更重要的是,它可以有效地避免大型数组的初始化。考虑到优化/全局数组优化,动态指针的方式比估计方法更好。
代码:
这是我们“通过Leetcode”系列的第一篇文章。该系列始于2021/01/01。从开始开始时的起始代码开始,总共有1916年的问题。该主题已经完成。
在这一系列文章中,除了解释问题 - 解决想法之外,还将尽可能多地提供最简洁的代码。如果涉及通信,将有相应的代码模板。
为了使学生更容易在计算机上调试和提交代码,我建立了一个相关的仓库:https://github.com/sharingsource/logicstack-letcode。
在仓库地址中,您可以看到一系列文章的解释链接,一系列文章的相应代码,leetcode的原始链接以及其他首选解决方案。
原始:https://juejin.cn/post/7102072293844582407