在平面上給出若干矩形,求出被這些矩形覆蓋過至少兩次的區域的面積.
這題相當於掃瞄線的高階版本。基本的掃瞄線就不講了,講一下這題的拓展處。記錄一下每一段被完全覆蓋的次數,維護區間被覆蓋的面積(覆蓋一次以上)維護區間被覆蓋兩次以上的部分的面積,顯然,對於已經覆蓋》=2的情況,整個區域都是合法的情況,更新的時候整段都當做合法的維護進去就好。對於當前整個區間已經被覆蓋了一次的情況,那麼向下詢問子區間內已經覆蓋一次以上的區間,那麼合起來就是重複兩次以上了。
#include
#include
#include
#include
#include
using
namespace std;
typedef
long
long ll;
const
int maxn=
2022
;#define sfi(a) scanf("%d",&a)
#define sfl(a) scanf("%lld",&a)
#define sff(a) scanf("%lf",&a)
struct line
}line[maxn<<1]
;struct segmentree
tre[maxn<<3]
;ll ix[maxn<<1]
;int n,m;
double ry[maxn<<1]
;void
pushup
(int p)
elseif(
cov(p)==1
)}else
}void
build
(int p,
int l,
int r)
int mid=(l
(p)+
r(p))/
2;build
(p<<
1,l,mid)
;build
(p<<1|
1,mid+
1,r);}
void
addtre
(int p,
int l,
int r,
int val)
int mid=(l
(p)+
r(p))/
2;if(mid>=l)
addtre
(p<<
1,l,r,val);if
(midaddtre
(p<<1|
1,l,r,val)
;pushup
(p);
}void
solve()
sort
(line+
1,line+1+
2*n)
;sort
(ry+
1,ry+1+
2*n)
;build(1
,1,2
*n);
for(
int i=
1;i<=
2*n;
++i)
double ans=
0.00
;for
(int i=
1;i<=
2*n;
++i)
printf
("%.2lf\n"
,ans+
1e-6);
}int
main()
hdu 1255 覆蓋的面積
與poj1151略有不同 由於是大於等於2 的有效 所以應該更新到點 include include include include include include include include include includeusing namespace std define inf 0x3f3...
HDU 1255 覆蓋的面積
題目鏈結點這裡 這道題,很久以前做過,當時寫了個暴力,居然過了,然後一直想寫下線段樹的,結果一直被各種事搞得忘了。現在終於填坑了。include include include includeusing namespace std define mem x,y memset x,y,sizeof x...
HDU 1255 覆蓋的面積
題目 給定平面上若干矩形,求出被這些矩形覆蓋過至少兩次的區域的面積.input 輸入資料的第一行是乙個正整數t 1 t 100 代表測試資料的數量.每個測試資料的第一行是乙個正整數n 1 n 1000 代表矩形的數量,然後是n行資料,每一行包含四個浮點數,代表平面上的乙個矩形的左上角座標和右下角座標...