d es
crip
tion
description
descri
ptio
n 在乙個l×w
l\times w
l×w的平面,有n
nn個矩陣和m
mm個詢問,每次詢問乙個矩陣與原先矩陣的面積交
資料範圍:n,m
,l,w
≤5×1
05
n,m,l,w\leq 5\times 10^5
n,m,l,
w≤5×
105sol
utio
nsolution
soluti
on這道題是一道十分顯然的掃瞄線,重點是我們如何維護其中的資訊
首先把每種矩形拆成兩個矩形,每個矩形都緊貼y
yy軸,這樣大小兩個矩形相減就得到了原矩形
接著把拆成的矩形非y
yy軸的那條邊當作一條線段
然後對直線按橫座標排序,此時我們有一條平行於y
yy軸的掃瞄線x=l
ine[
i].x
x=line[i].x
x=line
[i].
x向右移動
當掃瞄到一條自帶矩形的左線時,相當於在這棵線段樹上區間修改
當掃瞄到一條自帶矩形的右線時,相當於在這棵線段樹上區間撤銷(本質就是修改)
當掃瞄到一條詢問矩形的左線時,此時我們已經將原先的矩形拆成兩個,因為要用大減小,所以相當於讓答案減去當前矩形的面積
當掃瞄到一條詢問矩形的右線時,相當於對答案加上貢獻
考慮線段樹維護的資訊
l en
lenle
n陣列表示覆蓋的矩形個數
s um
sumsu
m陣列表示覆蓋矩形的面積和(與每條線段樹的直線相關)
以及它們對應的laz
ylazy
lazy
陣列t 1,
t2
t1,t2
t1,t2
這樣我們就可以精準的算出每個矩形的面積,總的時間複雜度o((
n+m)
logl
)o((n+m)logl)
o((n+m
)log
l) cod
ecode
code
#pragma gcc optimize(2)
%:pragma gcc optimize(3
)%:pragma gcc optimzie
("ofast")%
:pragma gcc optimize
("inline"
)#include
#include
#include
#define ll long long
#define lson k<<1
#define rson k<<1|1
#define n 500010
using
namespace std;
int w,l,n,m,tot;
struct node
}line[n<<2]
;ll ans[n]
;inline ll read()
struct datares[n<<2]
;struct xds
inline
void
pushup
(int k)
;//上傳資訊
return;}
inline
void
updata
(int ql,
int qr,ll val,
int d,
int k=1,
int l=0,
int r=l)
pushdown
(k,l,r)
;int mid=l+r>>1;
if(ql<=mid)
updata
(ql,qr,val,d,lson,l,mid);if
(qr>mid)
updata
(ql,qr,val,d,rson,mid+
1,r)
;pushup
(k);
return;}
inline data quary
(int ql,
int qr,
int k=1,
int l=0,
int r=l)
,tmp2=
(data)
,ans=
(data);if
(ql<=mid) tmp1=
quary
(ql,qr,lson,l,mid)
,ans.len+
=tmp1.len,ans.sum+
=tmp1.sum;
if(qr>mid) tmp2=
quary
(ql,qr,rson,mid+
1,r)
,ans.len+
=tmp2.len,ans.sum+
=tmp2.sum;
return ans;
}}tree;
signed
main()
;//原先矩陣,增加
line[
++tot]
=(node)
;//原先矩陣,刪除
}for
(register
int i=
1,x1,x2,y1,y2;i<=m;i++);
//查詢矩陣,減去
line[
++tot]
=(node)
;//查詢矩陣,增加
}sort
(line+
1,line+
1+tot)
;for
(register
int i=
1;i<=tot;i++)}
for(
register
int i=
1;i<=m;i++
)printf
("%lld\n"
,ans[i]);
}
矩形面積交
時間限制 1.0s 記憶體限制 512.0mb 問題描述 平面上有兩個矩形,它們的邊平行於直角座標系的x軸或y軸。對於每個矩形,我們給出它的一對相對頂點的座標,請你程式設計算出兩個矩形的交的面積。輸入格式 輸入僅包含兩行,每行描述乙個矩形。在每行中,給出矩形的一對相對頂點的座標,每個點的座標都用兩個...
矩形面積交
問題描述 平面上有兩個矩形,它們的邊平行於直角座標系的x軸或y軸。對於每個矩形,我們給出它的一對相對頂點的座標,請你程式設計算出兩個矩形的交的面積。輸入格式 輸入僅包含兩行,每行描述乙個矩形。在每行中,給出矩形的一對相對頂點的座標,每個點的座標都用兩個絕對值不超過10 7的實數表示。輸出格式 輸出僅...
矩形面積交
問題描述 平面上有兩個矩形,它們的邊平行於直角座標系的x軸或y軸。對於每個矩形,我們給出它的一對相對頂點的座標,請你程式設計算出兩個矩形的交的面積。輸入格式 輸入僅包含兩行,每行描述乙個矩形。在每行中,給出矩形的一對相對頂點的座標,每個點的座標都用兩個絕對值不超過10 7的實數表示。輸出格式 輸出僅...