竞赛
考级
我不知道为什么是绿题,就是一个很简单的模拟啊!把高度记录下来然后再把< a[i]的区间加一遍b[i]就可以了。 代码如下:
复仇者_THUNDER
【题目大意】 在一条线段上有 nnn 座有高度的能量塔每个能量塔都能散发一个能量扩散至碰到第一个高度大于等于这座能量塔的位置截至,期间所以有位置获得 aia_iai 的能量不包括阻挡能量扩散的那座塔的位置。 题目要求求这 nnn 个位置的能量。 SUBTASK:100% 【算法分析】 本题采用单调栈算法 两次循环分别从前后两个方向进行单调栈,单调栈高度,并记录此时还在单调栈中能量塔的总能量。 对于循环至第 iii 座能量塔时,我们可以用一个数组 ccc 来记录单调栈里剩余的能量,这也是全能达到 iii 的能量,之后再将第 iii 座能量塔入栈。 最终结果就是前后单调栈记录的结果以及自身散发的的能量。 时间复杂度 O(n) 。 【参考代码】
重生之我是菜狗
另一篇题解好像有误,在最差情况下(单调递增或递减),时间复杂度是O(n²),会超时,数据有点太水了。感觉应该是单调栈搭配差分做
哆啦[65]梦
看到大佬用单调栈做,但我没学过,所以用了ST表+二分+差分做. 扩散分为左,右两个部分 我们注意到 [l,i−1][l,i-1][l,i−1] 与 [i+1,r][i+1,r][i+1,r] 区间的高度最大值满足单调性,可以预处理最大值 O(1)O(1)O(1) 查询,二分即可.
队团加不)ด้้童帅_者仇复