(非線段樹)區間修改_單點查詢

區間修改,單點查詢的問題(非線段樹)

  • 因爲線段樹忘了具體的操作方式,所以不知道線段樹爲啥不行,該補補線段樹了
  • 因爲區間太大了,所以不能暴力直接對數組進行標記。

解決方案

採用設置兩個容器(分別記爲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的容器。
  • 容器中取出來的數,就不會再用了。
  • 前綴和的思想,後面查詢的點利用前面點查詢的結。
    • 要求查詢的序列,也應當是有序的。
    • 利用優先隊列使序列有序
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章