求 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 ...