description
近來a國和b國的矛盾激化,為了預防不測,a國準備修建一條長長的防線,當然修建防線的話,肯定要把需要保護的城市修在防線內部了。可是a國上層現在還猶豫不決,到底該把哪些城市作為保護物件呢?又由於a國的經費有限,所以希望你能幫忙完成如下的乙個任務:
給出你所有的a國城市座標
a國上層經過討論,考慮到經濟問題,決定取消對i城市的保護,也就是說i城市不需要在防線內了
a國上層詢問對於剩下要保護的城市,修建防線的總經費最少是多少
你需要對每次詢問作出回答。注意單位1長度的防線花費為1。
a國的地形是這樣的,形如下圖,x軸是一條河流,相當於一條天然防線,不需要你再修建
a國總是有兩個城市在河邊,乙個點是(0,0),乙個點是(n,0),其餘所有點的橫座標均大於0小於n,縱座標均大於0。a國有乙個不在(0,0)和(n,0)的首都。(0,0),(n,0)和首都這三個城市是一定需要保護的。
上圖中,a,b,c,d,e點為a國城市,且目前都要保護,那麼修建的防線就會是a-b-c-d,花費也就是線段ab的長度+線段bc的長度+線段cd的長度
如果,這個時候撤銷b點的保護,那麼防線變成下圖
input
第一行,三個整數n,x,y分別表示河邊城市和首都是(0,0),(n,0),(x,y)。
第二行,乙個整數m。
接下來m行,每行兩個整數a,b表示a國的乙個非首都非河邊城市的座標為(a,b)。
再接下來乙個整數q,表示修改和詢問總數。
接下來q行每行要麼形如1 i,要麼形如2,分別表示撤銷第i個城市的保護和詢問。
output
對於每個詢問輸出1行,乙個實數v,表示修建防線的花費,保留兩位小數
sample input
4 2 1
2 1 2
3 2
5 1 1
1 2sample output
hint
6.47
5.84
4.47
資料範圍:
30%的資料m<=1000,q<=1000
100%的資料m<=100000,q<=200000,n>1
所有點的座標範圍均在10000以內, 資料保證沒有重點
source
動態維護乙個凸殼.
因為要查詢的是周長不滿足貢獻可以累積不能寫分治qaq
所以最後寫了一發set..也是人生第一次寫平衡樹動態維護帶插入的凸包問題(乙個set你寫什麼平衡樹啦喂!)
#include
#include
#include
#include
#include
#include
#define maxn 200100
#define eps 1e-9
using
namespace
std;
int n,m,q;
double x,y;
double ans,ans[maxn];
int sta1[maxn],sta2[maxn],top1,top2;
bool del[maxn];
inline
double sqr(double x)
struct point
inline
friend point operator -(point a,point b);}
inline
friend point operator +(point a,point b);}
}s[maxn];
inline
double dis(point a,point b)
set s;
inline
void insert(double x,double y)
; set
:: iterator r=s.lower_bound(now),l=r,t;l--;
if ((*r-*l)*(now-*l)<0) return;
ans-=dis(*r,*l);s.insert(now);
while (r!=s.end())
while (l!=s.begin())
s.insert(now);
l=r=s.find(now);
l--;r++;ans+=dis(*l,now)+dis(*r,now);
}int main()
);s.insert((point));
scanf("%lf%lf",&x,&y);s.insert((point));
ans+=dis((point),(point));ans+=dis((point),(point));
scanf("%d",&m);
for (int i=1;i<=m;i++) scanf("%lf%lf",&s[i].x,&s[i].y);
scanf("%d",&q);
for (int i=1;i<=q;i++)
}for (int i=1;i<=m;i++) if (!del[i]) insert(s[i].x,s[i].y);
for (int i=top2;i;i--)
for (int i=1;i<=top2;i++) printf("%.2f\n",ans[i]);
}
BZOJ2300 HAOI2011 防線修建
每次刪乙個點或詢問剩餘點的凸包周長 刪乙個點好麻煩呀,考慮離線,倒著操作將刪點改為加點 然後就簡單了,用一顆平衡樹維護凸包中的點,倒著把點加回去 splay可以用set 論熟練運用stl code include include include include include include inc...
BZOJ 2300 HAOI2011 防線修建
近來a國和b國的矛盾激化,為了預防不測,a國準備修建一條長長的防線,當然修建防線的話,肯定要把需要保護的城市修在防線內部了。可是a國上層現在還猶豫不決,到底該把哪些城市作為保護物件呢?又由於a國的經費有限,所以希望你能幫忙完成如下的乙個任務 1.給出你所有的a國城市座標 2.a國上層經過討論,考慮到...
bzoj 2300 HAOI2011 防線修建
description 近來a國和b國的矛盾激化,為了預防不測,a國準備修建一條長長的防線,當然修建防線的話,肯定要把需要保護的城市修在防線內部了。可是a國上層現在還猶豫不決,到底該把哪些城市作為保護物件呢?又由於a國的經費有限,所以希望你能幫忙完成如下的乙個任務 1.給出你所有的a國城市座標 2....