output a blank line after each test case.這裡看到我寫了兩次並且兩次都用了粗體,就應該知道我wa在**了吧。坑哭了,沒看到這細節。還有乙個就是要注意這個是多組樣例的,所以千萬要記得tree陣列要初始化。我和其他人的寫法不太一樣,因為按點寫線段我實在理解不了,也不太會,更看不懂,所以我就直接按照線段寫,即l+1 == r是葉子節點。這樣的話感覺好寫一點。剩下的就是離散化一下了,可以看成乙個板子了。
#include
#include
#include
#include
using namespace std;
const
int maxn =
2e5+5;
double x[maxn]
;int edge_num;
struct edge
}edge[maxn]
;struct node
tree[maxn<<2]
;void
addedge
(double _left,
double _right,
double _height,
int _flag)
void
pushup
(int left,
int right,
int cur)
void
update
(int l,
int r,
int cur,
int _from,
int _to,
int val)
if(l+
1== r)
return
;int mid =
(l+r)
>>1;
if(_from <= mid)
update
(l, mid, cur<<
1, _from, _to, val);if
(_to >= mid)
update
(mid, r, cur<<1|
1, _from, _to, val)
;pushup
(l, r, cur);}
intmain()
printf
("test case #%d\n"
, cas++);
sort
(x+1
, x+1+
(n<<1)
);sort
(edge+
1, edge+
1+edge_num)
;int num =
unique
(x+1
, x+1+
(n<<1)
)-x-1;
double result =
0.0;
for(
int i =
1; i < edge_num; i++
) result +
= tree[1]
.len*
(edge[i+1]
.height-edge[i]
.height);}
printf
("total explored area: %.2lf\n\n"
, result);}
return0;
}
線段樹 掃瞄線
pku 1151 hdu1542 atlantis 矩形面積並 題意 給出n個矩形,每個矩形給出左下角座標,右上角座標。然後求矩形並的總面積 思路 浮點數先要離散化 然後把矩形分成兩條邊,上邊和下邊,對橫軸建樹,然後從下到上掃瞄上去,用cnt表示該區間下邊比上邊多幾個,sum代表該區間內被覆蓋的線段...
掃瞄線 線段樹
問題描述 小明的家旁邊有條河流,但最近,周圍的三個工廠開始向這條河排放汙水,這條河的一部分被汙染了,被乙個工廠汙染的部分可以看做乙個矩形,現在小明想知道這條河被汙染的面積是多少。輸入 第一行乙個整數t,表示有多少組資料,之後每一組資料報括三行,每一行有lx,ly,rx,ry四個整數,表示被乙個工廠汙...
線段樹 掃瞄線
掃瞄線問題主要利用了線段樹。因為矩形的並集比較難算,所以我們可以用 sum 掃瞄線被截長度 所掃瞄的高度 來求和。而這樣做發現可以用線段樹來優化,具體優化方式如下 所掃瞄的高度比較好求,主要是掃瞄線被截長度需要優化。我們可以設橫邊有乙個a權值,如果該邊是矩陣的下邊則設為1,相反就設為 1,這樣如果一...