nssl 1425 矩形的面積交

2021-09-29 08:39:40 字數 3112 閱讀 7953

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的實數表示。輸出格式 輸出僅...