我們會發現dp不滿足單調性,但是可以構建凸包,其中點的表示方法很巧妙
要對一些問題轉化成凸包敏感一點,嘗試找出表示凸包的點,看看是否可以用斜率來表示答案。
一定要寫eps,wa到死。。。
在cdp分治如果預先,處理了某一維資訊相對的順序,那麼在分治中千萬不能打破這個順序!!!!
#include#include#include#include#include#includeusing namespace std;
const int n=120005;
int n,st[n];
double f[n],a[n],b[n],rate[n];
const double eps=1e-9;
struct vec;
typedef vec point;
point p[n],pp[n];
struct aa
t[n],t1[n];
bool cmp(aa a,aa b)
int now=1;
for (int i=r;i>mid;i--)
work(mid+1,r);
int h = l, t = mid + 1;
for(int i = l; i <= r; ++i)
if ((p[h] < p[t] || t > r) && h <= mid) pp[i] = p[h++];
else pp[i] = p[t++];
for(int i = l; i <= r; ++i) p[i] = pp[i];}
int main()
BZOJ 2961 共點圓 CDQ分治 凸包
題目大意 給定平面,多次插入點和圓,每次插入點時詢問當前插入的點是否在之前插入的所有圓中並且至少在乙個圓中 直接用資料結構維護這些點和圓不是很好寫,我們考慮cdq分治 對於每層分治,我們需要對於 mid 1,r 中的每個點求出 l,mid 中是否所有的圓都覆蓋了這個點 設點的座標為 x0,y0 那麼...
BZOJ2961 共點圓 cdq分治 凸包
bzoj傳送門 首先考慮乙個點 x 0,y 0 什麼時候在乙個圓 x 1,y 1,sqrt 內 顯然有 x 12 y 12 geq x 0 x 1 2 y 0 y 1 2 化簡 2x 0x 1 2y 0y 1 geq x 02 y 02 所有含 x 1,y 1 的項挪到同一邊,除掉乙個 2y 0 假...
分治演算法 凸包
凸包是正好包含所有點的凸邊形,之所以叫凸包,是因為凸中包含了凸多邊形包圍起來的所有點 我們要寫的是找出凸包的頂點集,使用分治演算法 首先,連線最左端和最右端的兩點。命名線上方的區域為上包,下方位下包,將兩點加入到頂點集合 然後,找到與直線距離最遠的兩點,與第一步中的兩點相連,劃分為上包和下包,新找出...