首页 > 其他 > 详细

[Code+#3]寻找车位

时间:2020-12-15 00:02:29      阅读:26      评论:0      收藏:0      [点我收藏+]

以行建立线段树,点 \([l,r]\) 存贮横坐标在这个范围内的正方形面积的最大值。

合并信息的话,就比较套路了,考虑左儿子和右儿子各自的最大值,以及组合能产生的最大值。

中间那条分割线的两侧,各自有两个柱状图,表示最长的连续的 \(1\)

设两侧的长度各位 \(h,g\),这个是可以直接合并得到的。

会发现答案就是:

\[\max_{1\le l\le r\le m}(\min(\min_{l\le i\le r}h_i+\min_{l\le i\le r}g_i,r-l+1)) \]

若是考虑双指针,会发现我们需要撤销一个数对于 \(\min\) 的影响,此时应该怎么办呢?

Naive 的 Rui_R 提供了带一只 \(\log\) 的 st 表做法。

但实际上可以单调队列直接搞,不用考虑撤销影响这种鬼东西。

那么也就是说,每个节点的修改复杂度为 \(\operatorname O(m)\)

预处理复杂度则为 \(\operatorname O(nm)\),单次修改复杂度为 \(\operatorname O(m\log n)\)

考虑一次查询我们应该怎么办?

其实很也很套路,可以像刚刚合并左右儿子一样,合并查询到的 \(\log\) 个区间的信息。

看题解之前一直在往切比雪夫距离那里想,毕竟一开始受 Point_King 巨佬思路的影响,导致完全不想去考虑线段树。

[Code+#3]寻找车位

原文:https://www.cnblogs.com/zjjws/p/14136071.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!