偷了一個題表來作,當作康復訓練了23333ios
代碼在這裏git
【2018.7.3】github
【2018.7.4】數組
單調棧處理\(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)才行
CF459D
裸二維偏序,預處理 + 樹狀數組,用後綴和bit也能夠
答案就是最大長*最大寬
變成一維問題,加入點、求當前相鄰點最大差值
平衡樹處理線段問題,插入、找前驅後繼,能夠用set
再用個map或者multiset來作刪除、插入、求最大值,map居然更快2333
set/map小筆記:內部是平衡樹,用<定義的; 迭代器能夠++ —, insert返回pair(迭代器,bool),multi的話返回迭代器.
classical的dp,\(f_i\)表示拼出s[1,i]上一步用了哪一個單詞,枚舉單詞長度來轉移,複雜度O(n*1000)
而後個人哈希一直衝突衝突衝突........因而寫了trie
單詞建trie,對主串每一位都跑1000長度
【2018.7.5】
CF339D
線段樹,單點修改,查詢根 2333
CF527D
classical 區間覆蓋不重疊貪心
P3043 [USACO12JAN]Bovine Alliance
樹的貢獻是n,一個環的貢獻是2,有其餘的就無解
並查集維護
樹的同構 自底向上哈希,對每一個點,孩子節點哈希值排序再哈希起來構成本身的哈希值
對於本題,若u、v加一個新點後同構,則u、v徹底等價,u、v分別爲根時哈希值相等
加上記憶化後複雜度分析:由於度數<=4,因此對於一個點不一樣的哈希值最多4種
由於哈希衝突留下了內心陰影,因而學了hzwer的一個技巧,直接給vector分配哈希值(也是利用了度數小)