Information
- ID
- 8
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 8
- Tags
- (None)
- # Submissions
- 62
- Accepted
- 11
- Uploaded By
每次询问,我们通过二分答案+前缀和加速,可以做到O(logn)。总复杂度为O(nlogn),空间复杂度O(n)。
具体操作是,当询问至ai时,根据贪心的思想,显然有先将ai−1、ai+1合并至ai,然后将ai−2、ai+2合并至ai……以此类推。我们可以二分这个答案:当我们合并至[i−k,i+k]区间时,操作次数尚有富裕、但[i−k−1,i+k+1]时就操作次数不足了。然后我们可以O(1)求出剩余操作次数带来的收益。
在二分时,最关键的一点是如何O(1)计算出[i−k,i+k]区间的操作次数。这里可以用两个不同的前缀和数组进行数学转换求出,一个是ai的前缀和,另一个是ai∗i的前缀和。注意我们计算右边和左边要分开来算(左边需要利用ai的前缀和以及ai∗(n−i+1)的前缀和)。
By signing up a Hydro universal account, you can submit code and join discussions in all online judging services provided by us.