訓練日記 13

2021-08-07 02:04:04 字數 682 閱讀 4589

這幾天主要在看樹狀陣列的相關學習資料了,樹狀

陣列是乙個查詢和修改複雜度都為log(n)的資料結構。主要用於查詢任意兩位之間的所有元素之和,但是每次只能修改乙個元素的值;經過簡單修改可以在log(n)的複雜度下進行範圍修改,但是這時只能查詢其中乙個

元素的值(如果加入多個輔助陣列則可以實現區間修改與區間查詢)。

樹狀陣列的基本模版如下:

lowbite

操作:

int lowbit(int x)

modify操作單點的更新:

void modify(int pos,int sc)//位置

pos更新sc

} getsum操作區間求和:

int getsum(int pos)

return sum; } 

樹狀陣列有自身的優越性也有自身的侷限性。

其優越性表現為:

1).空間耗費小

2).程式設計簡單

只要開乙個陣列,所有的操作都可以在十行**之內實現。沒有了繁瑣的指標和亂七八糟的二分,編寫不容易出錯。

其侷限性表現為:

1).無法記錄一些附加資訊(如:不相交區間的個數)

2).樹狀陣列的應用範圍狹窄

①求和問題可用

②如果求最大值操作,而且沒有刪除操作的話

明天再結合題目進一步掌握樹狀陣列這個演算法。

訓練日記 20161024

初賽好像不會掛了,好開心!版權原因,不上傳題目。題意 求1 n n 1000 的排列中逆序對恰好為 k 個的排列數目。多測。題解 f i j 表示前 i 個數,逆序對個數恰好為 j的排列個數,易得轉移方程f i j i 1k 0f i 1 j k 用字首和優化可使複雜度降為o n2 題意 對於乙個長...

訓練日記 20170324

長久不更新部落格了。期間經歷了恰好被ag線踩的wc,經歷了漫長痛苦的小高考準備。現在終於可以重整旗鼓,向省選進發!幾個月來,唯一不變的是我仍然是個超級蒟蒻 版權原因,不上傳題目。題意 最小樹形圖 去年就接觸 聽說 過的演算法,一直沒有真正寫過。因為各種奇怪的細節錯誤,調了好幾個小時 比如找環時沒有判...

訓練日記 20170328

今天的題目似乎很水 好多人都提前ak離場了,於是提前一小時收題。但是我還是各種不會。思維江化?話說,聽到一句很有趣的話 山不在高,有林則徐 水不在深,有江 題意 給定一棵有n n 105 個節點的有根樹,編號互不重複。詢問有多少棵子樹內節點編號構成乙個連續區間。題解 水題,對於每個節點 i 記錄以該...