HDU3333 線段樹 數狀陣列 hash

2021-05-25 05:14:34 字數 385 閱讀 3541

題意:數軸上的區間和問題,有一些變化就是要求的是不同元素的和,線段樹or數狀陣列可以解決.

剛開始時竟然給線段樹的每人結點維護了乙個set 來標記是否有重複,那個複雜度弄的比暴力都高了吧,汗乙個~

後來看了下別人的思路,採用離線操作,對q所要求的區間以右端點遞增排序,從左至右插入新的元素,如果該元素已經插入了線段樹中,就刪掉舊位置的,在新位置插入該元素,並對以該元素位置為右端點的區間進行查詢求和,即為結果.

記錄元素是否已插入線段樹可用離散化+二分來實現,也可用hash來記錄.這裡用的是hash表.

首先用線段樹寫了,可是一直re的很悲狀,後來才發現ans陣列竟然開小了,這鬼~

數狀陣列實現很簡單,甚至效率也高了線段樹很多.

線段樹:

數狀陣列:

HDU 3333 離線線段樹

線段樹 給定乙個序列,求區間出現的數的數值和,若有多個,只計算一次 先離散化存數資料 對詢問區間按右節點排序,這樣我們每次維護的都是從前到當前位置,保證其重複元素不累加 跟新節點,對於之前出現過的刪除,並在新位置新增 然後查詢即可 include iostream include algorithm...

HDU 3333 線段樹 離散化

只查詢區間不同的數的和 思路好題 對查詢離線 不斷的往每個位置插值 並把前面位置的值置為0 每查到乙個右端點 查詢一下 等價操作的轉換 離散化一下 include define mem a,b memset a,b,sizeof a define lson root 1 define rson ro...

HDU 3333 線段樹 離線處理

hdu 3333 線段樹 離線處理 問你給定區間內的不重複的數字的和,如1 1 1 3 4 區間1到2就是1,區間1到5就是8。這種線段樹只能離線來寫,離線的方法是按照查詢區間的右端點來排序,然後這道題目的資料範圍較大需要離散化簡單處理一下,然後對於輸入的每個點來說,順序走下去。然後如果當前點之前出...