hdu 1542 矩形面積並

2021-07-11 19:38:25 字數 615 閱讀 9230

如圖:

用乙個水平線從下往上進行掃瞄,遇到a線段(cover=1),將其插入線段樹中,線段樹中的每個節點都有個cover值,初始都為0,因此第一條線段插入時不會覆蓋其它線段(顯然的)。接著是b線段(cover=1)插入線段樹,與a線段產生覆蓋的區間是第一次計算的面積,覆蓋的區間相當於矩形長,再利用線段樹中存的矩形縱座標,可得到矩形寬,然後就能算出面積。

接著是c線段插入線段樹(cover=-1),與前面的a和b線段的產生覆蓋的區間,此時可以得到第二次計算的面積 

另外,我這裡是從下往上進行掃瞄,故此只對橫座標就行離散化就行了。

還有一件事,平時我用的線段樹,葉子節點其實存的已經不是線段,而是乙個點了(或者說是陣列的下標),但是此題還這樣的話會出現問題,如圖:

因此需要讓線段樹的葉子節點存成單位長度,如圖:

HDU 1542 矩形面積並)

problem description 已知atlantis的地圖由許多矩形構成,求它們的面積並。input 題目有多組資料,每組資料的開頭有乙個整數n 1 n 100 表示地圖數,接下來n行,每行4個小數 x1 y1 x2 y2 0 x1資料以0結束 output 對於每組資料,你需要輸出一行 t...

HDU1542矩形面積並

取出縱向邊按x座標排序,在y方向上建立線段樹。每次查詢當前有效長度len,ans len x i x i 1 其中len為t rt len 查詢完畢後更新y方向上線段樹,入邊 1,出邊 1。1 include2 using namespace std 3 define lson l,m,rt 1 4...

HDU 1542 矩形的面積並求解

1.題目鏈結。其實是乙個比較經典的問題,自己對著 手動的畫一下就明白了。主要是弄清楚線段樹維護的到底是個什麼東西,在掃瞄線向上掃瞄的過程中,線段樹維護了當前x軸上有貢獻的線段長度。具體的思路是首先離散化每個點,然後在這些點上打標記,記錄每個點的貢獻,算出當前線段的長度即可。include inclu...