【Leetcode】2602-1903

如果就考虑每次查询的时候就直接遍历,那么时间复杂度就是O(mn)就超时了

考虑问题的难度在哪里?因为每个数字在下一次查询的时候并不知道是需要增大还是减小,所以不能做一个统一的操作。
考虑进行排序,那么此时,每个查询需要的操作就是,前边一段都增加,后边一段都减小,这个前后分割的位置,就是当前查询的大小的位置。可以利用二分法在O(lgn)时间内找到。之后是增大和减小的各一段,就可以直接利用求和的方式计算出需要减小和增大的次数了。

题目的本质是一个排序和二分。

posted @ 2024-07-10 21:08  TICSMC  阅读(5)  评论(0)    收藏  举报