線段樹 掃瞄線

2022-09-21 12:27:07 字數 844 閱讀 7394

這其實是計算幾何的一部分。一般被用來解決圖形面積、周長等問題。

求給定的 \(n\) 個矩形的面積並

如圖:(從左到右掃)

若乙個矩形的左下頂點座標為 \((x_1,y_1)\) ,右上頂點座標為 \((x_2,y_2)\)

模板**:

#includeusing namespace std;

#define int long long

const int n=1e5+5;

int n;

double ls[n<<1];

struct linea[n<<4];

struct nodetr[n<<4];

bool cmp(line x,line y)

void pushup(int node)

void change(int node,int l,int r,int x)

change(node<<1,l,r,x);

change(node<<1|1,l,r,x);

pushup(node);

}signed main()

n<<=1;//後面用起來方便

sort(a+1,a+n+1,cmp);

sort(ls+1,ls+n+1);//離散化

int tot=unique(ls+1,ls+n+1)-ls-1;//去重

ls[tot+1]=0x3f3f3f3f;

build(1,1,tot);//建樹

int ans=0;

for(int i=1;i求周長

線段樹 掃瞄線

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

掃瞄線 線段樹

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

線段樹 掃瞄線

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