牛客网题解:求最大值区间 - 笛卡尔树解法
这道题要求找到一个达到最值的区间,题解中给出了两种思路:
-
使用某种数据结构维护所有区间的价值,以得到最值的区间。另一种思路是枚举其中一个值或两个值,然后贪心地使乘积最大。
-
在枚举最小值的情况下,选择枚举最小值,因为最大值随区间扩大是不降的。这样一来,在枚举最小值的情况下,我们只需要考虑选取枚举值为最小值的最大区间,这样只有n个可能的答案区间。
对于每个值为最小值的区间,一种常见的方法是使用单调栈来维护,并且考虑如何得到区间的最大值。如果要硬做,似乎没有不带log的做法,但是使用分治的方法可以得到常数较小的解。
此外,这个题目也可以使用笛卡尔树来解决。笛卡尔树利用了所有n个区间构成一棵树的特点,因此直接从两个子区间中取最大值即可。
最后,题解中提到出题人不确定是否有除了枚举最小值的其他解法。
原文地址: https://www.cveoy.top/t/topic/pbEv 著作权归作者所有。请勿转载和采集!