(非线段树)区间修改_单点查询

区间修改,单点查询的问题(非线段树)

  • 因为线段树忘了具体的操作方式,所以不知道这个题线段树为啥不行,该补补线段树了
  • 因为区间太大了,所以不能暴力直接对数组进行标记。

解决方案

采用设置两个容器(分别记为head,tail)的方法,分别存储一段区间的开头、结尾

  • 假设head中有一个数i,则i代表大于等于i之后的数,操作次数都加一。
  • 假设tail中有一个数j,则j代表大于等于j之后的数,操作次数都减一。

例,有两个区间,分别是[1,4],[2,8]。则head中存储1、2, tail中存储4、6。查询点3时,用head中3前面的数 减去 tail中3前面的数。 即2 - 1 = 1,所以点3对应的值为1。

本题的优化方式

原则:

  • 利用优先队列作为head、tail的容器。
  • 容器中取出来的数,就不会再用了。
  • 前缀和的思想,后面查询的点利用前面点查询的结。
    • 要求查询的序列,也应当是有序的。
    • 利用优先队列使序列有序
posted @ 2020-04-26 22:33  Daybreaking  阅读(124)  评论(0编辑  收藏  举报