1.14模擬賽
阿新 • • 發佈:2019-01-14
dp式子很好列
展開就是斜率優化。而且橫座標單增,可以直接單調佇列
但是權值的偏序比較麻煩
兩種方法:
1.權值線段樹維護單調佇列
權值離散化。線段樹每個節點維護所代表的區間的凸包(單調佇列)
非常暴力,每次新加入一個點,就在對應位置插入,然後在logn個凸包上插入這個點。由於橫座標單增,所以直接隊尾加入即可。
複雜度均攤O(logn)總複雜度O(nlogn)
deque慢死,vector還是慢死,可以開O(nlogn)長度的陣列,然後給每個點分配所屬的記憶體。類似於分治的記憶體分配感覺
2.cdq
偏序問題,cdq可以利用下標解決一維
①但是最大的問題是,這個題的dp,按照一般的cdq(l,mid),cdq(mid+1,r)再處理當前,會後效性。正確性不對
②如果cdq(l,mid)處理當前,再cdq(mid+1,r);本身不能處理好偏序的問題,(不能自底向上歸併),暴力sort會TLE。複雜度不對
其實我們第二個方案只要知道當前的排序結果即可。
所以空跑一遍cdq,然後歸併,記錄每一層最終的排序結果。即可。
(考場上沒有想出來先空跑預處理一遍,然後logn層存下來。。。。。。浪費大量時間得到了暴力分的好成績)
T3:
f[i][j]表示,第i個位置放點,包括第i個位置放了j個點,最大收益
考慮區間貢獻怎樣不算重。
線段樹處理每個點的貢獻,到了區間左端點,把[1,l-1]加上c;到右端點的時候,把[1,l-1]減掉c
O(nmlogn)
T1的cdq經驗不足啊,,,總是預處理有的時候想不到。。總空間O(nlogn)預處理還是很常見的。。。