BZOJ2300 HAOI2011 防線修建

2021-07-24 13:58:41 字數 1528 閱讀 5915

每次刪乙個點或詢問剩餘點的凸包周長

刪乙個點好麻煩呀,考慮離線,倒著操作將刪點改為加點

然後就簡單了,用一顆平衡樹維護凸包中的點,倒著把點加回去

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....