1. 程式人生 > >1.14模擬賽

1.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)預處理還是很常見的。。。