BZOJ2640 可見區域 計算幾何 平衡樹

2021-09-09 05:49:15 字數 932 閱讀 2676

題目鏈結

題意:給定n

nn條互不相交的線段,從原點向四周看,視線遇到線段會被擋住。求此時能看到的視野範圍,以及分別刪除一條和兩條線段後能看到最大的視野範圍。

n ≤50

,000

n\le 50,000

n≤50,0

00cy拉我做題啦啦啦……

考慮用迴圈掃瞄線(就是從原點開始繞360度的掃瞄線)。維護每個時刻所有線段對應的位置關係,也就是說所有時刻所有線段按在掃瞄線上到原點距離從小到大排序。由於線段互不相交,所以任意時刻相對大小不會改變。於是我們就有了加入一條線段和刪除一條線段的操作,這顯然可以使用平衡樹維護。

一條線段都不刪的情況直接在每個時刻看平衡樹中最靠近原點的那條線段與兩條掃瞄線形成三角形的面積即可。

刪除一條線段時,我們考慮令f[i

]f[i]

f[i]

表示刪掉線段i

ii的貢獻,顯然對於每個時刻,我們可以看最小線段到次小線段之間夾的面積大小,把這個貢獻值加給最小線段的f

ff即可。最後f

ff取個max。

刪除兩條線段時,我們再令g[i

][j]

g[i][j]

g[i][j

]表示同時刪掉i,j

i,ji,

j時,每一時刻次小線段到第三小線段之間的面積貢獻值。則答案就是max

max\

max。g[i

][j]

≠0

g[i][j]\neq 0

g[i][j

]̸​=

0的情況只有o(n

)o(n)

o(n)

種,直接暴力列舉即可;否則直接取f

ff的最大值和次大值加起來即可。

到此為止,總複雜度o(n

logn

)o(nlogn)

o(nlogn)。

BZOJ 1007 水平可見直線 幾何 半凸包

題意 在xoy直角座標平面上有n條直線l1,l2,ln,若在y值為正無窮大處往下看,能見到li的某個子線段,則稱li為可見的,否則li為被覆蓋的.例如,對於直線 l1 y x l2 y x l3 y 0 則l1和l2是可見的,l3是被覆蓋的.給出n條直線,n 5e4,表示成y ax b的形式 a b...

P3194 水平可見直線 計算幾何 單調棧

單調棧存放直線,把直線按斜率公升序排序列舉l il i li 與棧頂直線的交點如果在棧頂與次棧頂的交點左邊,那麼棧頂代表的直線是不可視的,彈出。include include include include include using namespace std const double eps 1...

BZOJ 1027 合金 計算幾何,Floyd判環

description 某公司加工一種由鐵 鋁 錫組成的合金。他們的工作很簡單。首先進口一些鐵鋁錫合金原材料,不同種類的 原材料中鐵鋁錫的比重不同。然後,將每種原材料取出一定量,經過融解 混合,得到新的合金。新的合金的鐵鋁 錫比重為使用者所需要的比重。現在,使用者給出了n種他們需要的合金,以及每種合...