線段樹應用 掃瞄線

2021-09-01 05:45:31 字數 1079 閱讀 6284

掃瞄線暴力解決的話時間和空間複雜度往往是不夠的。

所以,掃瞄線也就成了線段樹很大的應用。

具體原理解釋(寫得很好):

很好)給出模板:第一篇部落格(饒齊大佬)的修正與改進,還有一些地方的解釋,錯誤原因

第乙個:

//二維平面有n個平行於座標軸的矩形,現在要求出這些矩形的總面積. 重疊部分只能算一次.

#includeusing namespace std;

const int maxn=2222;

#define lson i<<1,l,m

#define rson i<<1|1,m+1,r

#define root 1,1,k-1

double x[maxn];

struct node

node(double a,double b,double c,int d): l(a),r(b),h(c),d(d){}

bool operator <(const node &b)const

}///根據子節點的cnt值和sum值更新父節點的cnt和sum值

void pushup(int i,int l,int r)

void update(int ql,int qr,int v,int i,int l,int r)

}pushdown(i,l,r);

int m=(l+r)>>1;

if(ql<=m) update(ql,qr,v,lson);

if(m=l)

return -1;

}int main()

sort(x+1,x+n+1);

sort(nodes+1,nodes+m+1);

int k=unique(x+1,x+n+1)-(x+1);//去掉相鄰的重複元素

//build(1,1,k-1);

memset(sum,0,sizeof(sum));

memset(cnt,0,sizeof(cnt));

double ret=0.0;//最終面積

for(int i=1;i經典例題:

hdu 1542 atlantis(線段樹:掃瞄線)

線段樹 掃瞄線

pku 1151 hdu1542 atlantis 矩形面積並 題意 給出n個矩形,每個矩形給出左下角座標,右上角座標。然後求矩形並的總面積 思路 浮點數先要離散化 然後把矩形分成兩條邊,上邊和下邊,對橫軸建樹,然後從下到上掃瞄上去,用cnt表示該區間下邊比上邊多幾個,sum代表該區間內被覆蓋的線段...

掃瞄線 線段樹

問題描述 小明的家旁邊有條河流,但最近,周圍的三個工廠開始向這條河排放汙水,這條河的一部分被汙染了,被乙個工廠汙染的部分可以看做乙個矩形,現在小明想知道這條河被汙染的面積是多少。輸入 第一行乙個整數t,表示有多少組資料,之後每一組資料報括三行,每一行有lx,ly,rx,ry四個整數,表示被乙個工廠汙...

線段樹 掃瞄線

掃瞄線問題主要利用了線段樹。因為矩形的並集比較難算,所以我們可以用 sum 掃瞄線被截長度 所掃瞄的高度 來求和。而這樣做發現可以用線段樹來優化,具體優化方式如下 所掃瞄的高度比較好求,主要是掃瞄線被截長度需要優化。我們可以設橫邊有乙個a權值,如果該邊是矩陣的下邊則設為1,相反就設為 1,這樣如果一...