#include
#include
#include
#include
using
namespace std;
const
int maxn =
2000+10
;#define lson l, mid, rt<<1
#define rson mid+1, r, rt<<1|1
struct rec
}rec[maxn<<2]
;struct segtreetree[maxn<<2]
;double cor[maxn<<2]
;// l == r代表沒有子節點了
void
pushup
(int l,
int r,
int rt)
// 如果只被覆蓋一次, 那麼等於子線段覆蓋之和相加,就成了兩次
else
if(tree[rt]
.cnt ==1)
//一次都沒有覆蓋, 那就只能找子線段覆蓋兩次的。
else}}
void
update
(int l,
int r,
int v,
int l,
int r,
int rt)
int mid =
(l+r)
>>1;
update
(l,r,v,lson)
;update
(l,r,v,rson)
;pushup
(l,r,rt);}
intmain()
; rec[i+n]
= rec
; cor[i]
= x1; cor[i+n]
= x2;
} n <<=1;
sort
(rec+
1,rec+
1+n)
;sort
(cor+
1,cor+
1+n)
;int m =
unique
(cor+
1,cor+
1+n)
-cor-1;
double ans =0;
for(
int i =
1; i < n;
++i)
// ans += 1e-8;
// ans += 0.005;
printf
("%.2lf\n"
, ans);}
return0;
}
#include
using
namespace std;
const
int maxn =
400+10;
const
double eps =
1e-8
;#define lson l, m, rt << 1
#define rson m + 1, r, rt << 1 | 1
//線段樹的每個結點儲存的都是乙個線段,每個葉子結點實際儲存的是該點到下乙個點之間的距離
//所以update的時候需要將r-1
//pushup的時候需要x[r+1]-x[l];
//lazy:代表當前結點的線段被覆蓋多少次
//sum:代表當前結點為根的子樹中被覆蓋的區間一共有多長
struct rec
rec(
double x1,
double x2,
double y,
int d):x1
(x1),x2
(x2),y
(y),
d(d)
bool
operator
<
(const rec& rhs)
const
}r[maxn]
;double x[maxn]
, sum[maxn*4]
;int lazy[maxn*4]
;int n;
void
pushup
(int l,
int r,
int rt)
else
if(l == r) sum[rt]=0
;else sum[rt]
= sum[rt<<1]
+sum[rt<<1|
1];}
void
update
(int l,
int r,
int v,
int l,
int r,
int rt)
int m = l + r >>1;
if(l <= m)
update
(l, r, v, lson);if
(r > m)
update
(l, r, v, rson)
;pushup
(l, r, rt);}
intgetid
(double x,
int mm)
void
solve()
n <<=1;
sort
(r+1
,r+n+1)
;sort
(x+1
,x+n+1)
;int m =
int(
unique
(x+1
,x+n+1)
-x-1);
double ans =0;
for(
int i =
1; i < n;
++i)
printf
("%.2lf\n"
,ans);}
}int
main()
#include
#include
#include
using
namespace std;
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
const
int maxn =
20000+10
;struct rec
}rec[maxn<<2]
;struct segtree seg[maxn<<2]
;void
pushup
(int l,
int r,
int rt)
else
if(l == r)
else
}void
update
(int l,
int r,
int v,
int l,
int r,
int rt)
int mid =
(l+r)
>>1;
if(l <= mid)
update
(l,r,v,lson);if
(r > mid)
update
(l,r,v,rson)
;pushup
(l,r,rt);}
intmain()
; rec[i+n]
= rec
; lb =
min(x1,lb)
; rb =
max(x2,rb);}
n <<=1;
sort
(rec+
1,rec+
1+n)
;int ans =
0, pre =0;
for(
int i =
1; i <= n;
++i)
printf
("%d\n"
, ans);}
return0;
}
矩形周長並,矩形面積並,矩形面積交
目錄 矩形周長並 矩形面積並 矩形面積交 includeusing namespace std const int maxn 50004 2 struct nodesegtree maxn 2 struct lineline maxn bool cmp line a,line b void cal ...
線段樹 矩形面積並
給出n個矩形的左下角和右上角的座標,求矩形面積的並。矩形面積並指的是被矩形覆蓋到的面積和,重疊部分僅算一次。多組輸入,每組首先乙個整數 n,代表矩形的數量 接下來每行四個整數 x1,x2,y1,y2,表示左上角座標 x1,y1 與右下角 x2,y2 每行乙個整數,表示矩形的面積並。input 10 ...
線段樹 掃瞄法解決矩形的面積並 周長並問題
矩形的面積並問題 平面上有n個矩形,各邊均平行於座標軸,求它們覆蓋的總面積 重複覆蓋的只計一次 矩形的周長並問題 平面上有n個矩形,各邊均平行於座標軸,求它們覆蓋形成的多邊形的周長。演算法 面積並 先將所有矩形的上邊界和下邊界作為水平線段記錄下來,並對所有矩形的左右邊界對應的橫座標離散化,設離散化後...