上凸包最好用水平排序做,如果用極角序會很難做。
坑點:set erase乙個元素之後,其他元素的指標不改變。
#include using namespace std;
typedef long long ll;
typedef int lint;
typedef pairpii;
const int maxn = 100001;
const double eps = 1e-12;
const double pi = acos(-1.0);
int sgn(double x)
struct point
point(double _x,double _y)
point operator -(const point &b)const
//叉積
double operator ^(const point &b)const
//點積
double operator *(const point &b)const
//繞原點旋轉角度b(弧度值),後x,y的變化
bool operator <( const point& b )const
};double dist(point a,point b)
int dist2(point a,point b)
const lint maxq = 200005;
pii q[maxq];
lint vis[maxn];
point p[maxn];
double ans[maxq],res;
setse;
void insert( point x )
res += dist( x,*r );
if( l != se.begin() )
}res += dist( *l,x );
se.insert(x);
}int main()
scanf("%d",&q);
for( lint f,x,i = 1;i <= q;i++ )else
}for( lint i = 1;i <= m;i++ )
for( lint i = q;i >= 1;i-- )else
}for( lint i = 1;i <= q;i++ )
return 0;
}
bzoj 2300 防線修建
題意 給出乙個點集,每次可能刪去乙個點或查詢上凸包的面積 保證無重點,保證最左面 最右面的點一定在凸包上 n 100000,m 200000 題解 動態凸包問題,然而這道題的保證簡直極為良心 所以呢,我們就可以用set來水這道題啦 我還是漲了不少姿勢的,比如迭代器居然可以自減 離線所有的操作之後處理...
HAOI2011 防線修建
傳送門 參考部落格 練習s tl stlst l庫。動態維護凸包。由於題目要求乙個乙個刪除,可以考慮反過來離線操作,乙個乙個加回去。當新增加乙個點的時候,往它的左右兩邊擴張 set setse t中按照x xx排好序 看是否需要修改凸包。用叉積判斷即可。注意最開始要加上dis 0,0 x,y dis...
HAOI2011 防線修建
近來a國和b國的矛盾激化,為了預防不測,a國準備修建一條長長的防線,當然修建防線的話,肯定要把需要保護的城市修在防線內部了。可是a國上層現在還猶豫不決,到底該把哪些城市作為保護物件呢?又由於a國的經費有限,所以希望你能幫忙完成如下的乙個任務 給出你所有的a國城市座標 a國上層經過討論,考慮到經濟問題...