T1:spa
根據貪心策略,在價格較小的時候買入,價格較大的時候賣出,得到的價值纔會更大。blog
天天均可以和以前的一天組成匹配,貢獻爲差值。排序
先用一個小根堆,維護尚未匹配的權值,從前向後掃,若堆頂比當前權值小,則組成匹配,累加差值,並將當前權值插入。im
咱們發現,在同一天買入和賣出,等價於這天沒有操做。查詢
也就是說若是連續彈出一段權值,中間的權值實際上沒有被彈出。img
咱們能夠把這些權值插入第二個小根堆裏,兩個堆同時查詢。時間
時間複雜度$O(nlogn)$co
T2:ps
咱們能夠簡單的推出$S_n^m$向四個方向的$O(1)$遞推式。
顯然:$S_n^{m+1}=S_n^m+C_n^m$,$S_n^{m-1}=S_n^m-C_n^m$。
而後考慮上下轉移。
能夠看出,向下轉移時,除了最後一行,其餘組合數的貢獻都是自身的2倍。
因此能夠得出:$S_{n+1}^m=2S_n^m-C_n^m$,$S_{n-1}^m=\frac{S_n^m+C_{n-1}^m}{2}$。
而後莫隊便可。
時間複雜度$O(n\sqrt{n})$。
T3:
大模擬。
咱們發現,對於任何一個矩形,寬都爲一,咱們能夠選取兩端點的上下左右共6個點等效替代這個矩形。
對於每一個矩形,查找這6個點有沒有其餘矩形便可。
先將詢問離線排序,一行一行加入,用並查集維護連通性。
開兩個vector將橫條插入當前行,第一個vector儲存豎條的上端點,第二個儲存下端點。
每次將第一個vector的個數累加,並掃一遍在當前行的第一個vector裏的矩形,更新上部的關鍵點。
同時掃一邊上一行的第二個vector,更新下部的關鍵點。
答案既是當前矩形個數減去並查集的邊數。
時間複雜度$O(nlogn)$。