模擬測試64

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)$。

相關文章
相關標籤/搜索