判定性統計問題的啓發

今天看見這樣一道題目:

一個N*N的矩陣(N<2000),滿足下列兩個操作:

1.添加一個子矩形;2.查詢某個點被多少個矩形覆蓋,並銷燬這些矩形。

 

如果沒有後面這句“銷燬”的話,這就是個水題了,直接用二維樹狀數組維護點事件即可,但是需要銷燬,怎麼辦?

 

盡然不能直觀的查詢某個點會被多少個矩形覆蓋,那麼不防換一個角度:查詢這個矩形是被哪個點銷燬的,首先我們可以知道,每個矩形只會被一個點銷燬,那麼是滿足什麼條件的點纔可以滿足呢?我們相當於是找一個時間在我矩形創建之後,屬於我的區域範圍,操作時間最靠前的點!

 

到這裏就豁然開朗了,我們把操作倒過來做一便,查詢區間最小值!

 

一個淺顯易懂的方法,給我的啓示是:當前的操作不可能直接統計的話,我們應該換一個方向,換一個角度,

比如:離線!這是最常用的方法,

還有就是轉換方向,統計與被統計~ 

在某些可以拆分或者相消的統計,考慮分段統計。

 

這讓我想到了之前的一道題:完美選手數!

對於有些只判斷是與否的問題,如果我們只是單純的維護個是與否的話會不會太浪費了?有時可以通過轉化把問題轉化爲區間最值以記錄更多信息。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章