程式設計細節總結(不定期更新)

2022-06-02 09:12:09 字數 737 閱讀 1683

最近總是犯一些奇奇怪怪的小錯誤,忍無可忍,總結如下(不定期更新,看我的犯錯頻率了qwq)。

1.線段樹初始化盡量將所有引數初始化好(留下個add沒初始化,出了問題半天查不出來)。

2.樹剖中,兩點往上跳時交換兩點順序的條件不是基於兩點本身深度的比較,而是基於兩點所在鏈頂點深度的比較(調了三個晚上,看了以前的程式才發現問題)。傳送門

3.二分圖匹配,如果用網路流解決,記得幾個陣列都要開n+m大小。

4.treap初始化過程中結點size要初始化為1(不是0);pushup維護size時是左右size之和+1(不是左右size之和,與線段樹混淆)。

5.離散化與線段樹搭配時,注意線段樹下標對應的是離散化後的下標,不要轉換兩次又回去了(儘管是不容易犯的錯誤,但是我還是犯了)。傳送門

6.用treap維護序列時,如果要o(logn)計算某個結點在treap中的排名,當然要維護每個結點的父親,如果題目同時要求有翻轉操作,那麼每次算排名記得先從上至下push_down一次,再向上找到父親結點。

7.dijkstra的寫法:不要從priority_queue中取出d後再更新dist,而應該塞進去的時候就更新,不然不僅常數大,而且複雜度會有問題:大概從o(mlogm)變成了o(mlog(nm))?幾乎翻了個倍。

8.sort函式的cmp函式的寫法:int cmp(int x,int y){return x9.圖論:如果建圖發現乙個點只有有限種狀態,而且直接建圖不方便解決(比如成環不好處理),那麼就把每個點拆開建狀態圖,有時有奇效^_^。傳送門

模板總結 不定期更新

這裡會掛一些自己認為很重要的模板,沒理解的就沒有注釋了,等理解了就更快速排序 簡單分治思想,時間複雜度從 o n log o n 2 不等,及其不穩定 code includeusing namespace std long long a 100001 n void qs int l,int r i...

不定期更新部落格

也算是乙個真正程式設計生涯的起點,聽說大神都有自己的部落格。csdn部落格主要是作為乙個詳細的記錄場所,類似log的verbose檔,細緻入微,無孔不入,因此可能更新頻率較高,質量也相對較低。我的意思是將csdn這裡的部落格作為日後更加精煉的部落格 比如個人blog站或者github pages 的...

C STL 不定期更新

一 set set的特性是,所有元素都會根據元素的鍵值自動排序,set的元素不像map那樣可以同時擁有實值 value 和鍵值 key set元素的鍵值就是實值,實值就是鍵值。set不允許兩個元素有相同的鍵值。include初始化 int arr 5 set iset arr,arr 5 或者只定義...