每次刪乙個點或詢問剩餘點的凸包周長
刪乙個點好麻煩呀,考慮離線,倒著操作將刪點改為加點
然後就簡單了,用一顆平衡樹維護凸包中的點,倒著把點加回去
splay可以用set
論熟練運用stl
code:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define inf 1e9
using
namespace
std;
const
int maxn = 110000;
struct node
node(int _x,int _y)
}a[maxn],up,zero; int n;
int mul(node x,node y)
int multi(node x,node y,node z)
bool judge(node x,node y)
bool
operator
<(node x,node y)
stack
t;bool vis[maxn];
int q[maxn];
int m;
double ret;
sets;
set::iterator it;
void ins(node x)
ret-=dis(zero,*l);
for(;!judge(*ll,zero);l=ll,ll--)
s.insert(x);
ret+=dis(x,zero)+dis(x,*l);
return ;
}if(multi(x,*r,*l)<=0) return ;
ret-=dis(*l,*r);
for(rr=r,rr++;!judge(*rr,up);r=rr,rr++)
ret+=dis(x,*r);
for(ll=l,ll--;!judge(*ll,zero);l=ll,ll--)
ret+=dis(x,*l);
s.insert(x);
}int main()
scanf("%d",&m);
for(int i=1;i<=m;i++)
for(int i=1;i<=n;i++) if(!vis[i]) ins(a[i]);
for(int i=m;i>=1;i--)
while(!t.empty()) printf("%.2lf\n",t.top()),t.pop();
return
0;}
HAOI2011 BZOJ2300 防線修建
description 近來a國和b國的矛盾激化,為了預防不測,a國準備修建一條長長的防線,當然修建防線的話,肯定要把需要保護的城市修在防線內部了。可是a國上層現在還猶豫不決,到底該把哪些城市作為保護物件呢?又由於a國的經費有限,所以希望你能幫忙完成如下的乙個任務 給出你所有的a國城市座標 a國上層...
BZOJ 2300 HAOI2011 防線修建
近來a國和b國的矛盾激化,為了預防不測,a國準備修建一條長長的防線,當然修建防線的話,肯定要把需要保護的城市修在防線內部了。可是a國上層現在還猶豫不決,到底該把哪些城市作為保護物件呢?又由於a國的經費有限,所以希望你能幫忙完成如下的乙個任務 1.給出你所有的a國城市座標 2.a國上層經過討論,考慮到...
bzoj 2300 HAOI2011 防線修建
description 近來a國和b國的矛盾激化,為了預防不測,a國準備修建一條長長的防線,當然修建防線的話,肯定要把需要保護的城市修在防線內部了。可是a國上層現在還猶豫不決,到底該把哪些城市作為保護物件呢?又由於a國的經費有限,所以希望你能幫忙完成如下的乙個任務 1.給出你所有的a國城市座標 2....