洛谷 P5490 模板 掃瞄線

2021-10-07 11:20:47 字數 1200 閱讀 4799

求 n

nn 個矩形的面積並

思路:掃瞄線

#include

#include

#include

#define ls (x<<1)

#define rs (x<<1|1)

#define maxn 1000010

using

namespace std;

typedef

long

long ll;

int n,x1,x2,y1,y2,x[maxn<<1]

;struct scan

}line[maxn<<1]

;struct segtreetree[maxn<<2]

;void

build

(int x,

int l,

int r)

void

pushup

(int x)

void

update

(int x,

int l,

int r,

int c)

update

(ls,l,r,c)

;update

(rs,l,r,c)

;pushup

(x);

}int

main()

;// 下邊權值為正

line[

2*i]

=(scan)

;// 上邊權值為負

} n<<=1;

sort

(line+

1,line+n+1)

;// 掃瞄線根據從下到上進行排序

sort

(x+1

,x+n+1)

;// 橫座標從左到右排序

int tot=

unique

(x+1

,x+n+1)

-x-1

;// 橫座標去重,unique 返回的是去重陣列最後元素的後一位指標

build(1

,1,tot-1)

;// 構造線段樹

ll res=0;

for(

int i=

1;i)printf

("%lld\n"

,res)

;return0;

}

洛谷P5490 模板 掃瞄線

題鏈 對於mark的引入 如果不引入直接加,會出現某段區間被重複加的現象,要保證若某段區間被覆蓋,則只需要加一次。include include include include include include pragma gcc optimize o2 using namespace std de...

P5490 模板 掃瞄線 掃瞄線

題目描述 求 n 個矩形的面積並。輸出格式 一行乙個正整數,表示 n 個矩形的並集覆蓋的總面積。発生 線段樹開小了,因為n變成了兩倍,線段樹就得開4 2 8倍 對每一根掃瞄線,維護所截得的長度,每次乘以兩根掃瞄線高度差就得到了面積並 截得長度用線段樹維護即可 注意線段樹需要離散化 include i...

P5490 模板 掃瞄線

n 給定n nn個矩形左下角和右上角的座標,求該矩形面積並 資料範圍 n 1 05n leq 10 5 n 105sol utio nsolution soluti on將每個矩形看做兩條平行於y yy軸的線段,掃瞄過去即可 需要注意的是給出來的是點,而我們維護的是線段 時間複雜度 o n log ...