水題練習 1

作題筆記 1

hzwer 數據結構雜題選講(14/16)

偷了一個題表來作,當作康復訓練了23333ios

代碼在這裏git

【2018.7.3】github

  1. CF140C 貪心、排序
  2. CF519B 離散化 / 排序
  3. CF650A 排序 (注意比較函數寫法很差會致使sort死掉)
  4. CF466C 裸一維偏序
  5. CHSEQ22 差分、並查集 相似線性空間
  6. CF460C 二分答案、貪心

【2018.7.4】數組

  1. CF212D.Cutting a Fence數據結構

    單調棧處理\(a_i\)做爲最小值的範圍延伸長度記爲\(l_i,r_i\)函數

    發現性質,對每一個\(a_i\)討論對長度k區間的最小值和的貢獻spa

    貢獻是\(a_i * \min(l_i+1,\ r_i+1,\ k,\ l_i+r_i+2-k)\)code

    而後發現有區間加常數和區間加等差數列兩種操做,二次差分排序

    PS:1.注意討論get

    ​ 2.iostream真是慢,要std::ios::sync_with_stdio(false)才行

  2. CF459D

    裸二維偏序,預處理 + 樹狀數組,用後綴和bit也能夠

  3. CF528A.Class Carving

    答案就是最大長*最大寬

    變成一維問題,加入點、求當前相鄰點最大差值

    平衡樹處理線段問題,插入、找前驅後繼,能夠用set

    再用個map或者multiset來作刪除、插入、求最大值,map居然更快2333

    set/map小筆記:內部是平衡樹,用<定義的; 迭代器能夠++ —, insert返回pair(迭代器,bool),multi的話返回迭代器.

  4. CF633C.Spy Syndrome 2

    classical的dp,\(f_i\)表示拼出s[1,i]上一步用了哪一個單詞,枚舉單詞長度來轉移,複雜度O(n*1000)

    而後個人哈希一直衝突衝突衝突........因而寫了trie

    單詞建trie,對主串每一位都跑1000長度

【2018.7.5】

  1. CF339D

    線段樹,單點修改,查詢根 2333

  2. CF527D

    classical 區間覆蓋不重疊貪心

  3. P3043 [USACO12JAN]Bovine Alliance

    樹的貢獻是n,一個環的貢獻是2,有其餘的就無解

    並查集維護

  4. CF718D. Andrew and Chemistry

    樹的同構 自底向上哈希,對每一個點,孩子節點哈希值排序再哈希起來構成本身的哈希值

    對於本題,若u、v加一個新點後同構,則u、v徹底等價,u、v分別爲根時哈希值相等

    加上記憶化後複雜度分析:由於度數<=4,因此對於一個點不一樣的哈希值最多4種

    由於哈希衝突留下了內心陰影,因而學了hzwer的一個技巧,直接給vector分配哈希值(也是利用了度數小)

相關文章
相關標籤/搜索