CF1709B Also Try Minecraft

题意

给定 nn 个数的序列 a1,a2,,ana_1, a_2, \cdots, a_nmm 次询问,每次询问给定两个数 l,rl, r,需要输出 {i=lr1max{0,aiai+1}lri=rl1max{0,ai+1ai}r<l\begin{cases} \sum \limits_{i=l}^{r-1} \max\{0,a_{i}-a_{i+1}\} && l \leq r \\ \sum \limits_{i=r}^{l-1} \max\{0,a_{i+1}-a_i\} && r < l \end{cases}

解法

先考虑暴力,显然就是区间求和,但是由于 2n1052 \leq n \leq 10^51m1051 \leq m \leq 10^5。这个复杂度是 O(nm)O(nm) 的,显然超时。但是赛时好像有人暴力卡常过了 pretest,不过被 hack 了。

显然区间求和是可以优化的,因为这题没有修改操作,可以预处理出两个前缀和数组,O(n)O(n) 预处理,O(1)O(1) 单次查询。

当然区间和也可以用线段树或树状数组等数据结构,复杂度 O(mlogn)O(m \log n)。我赛时就用的是树状数组。

posted @ 2022-07-22 09:08  HappyBobb  阅读(19)  评论(0)    收藏  举报  来源