假設當前詢問點為$(a,b)$,那麼它在乙個以$(x,y)$為圓心的圓裡需要滿足:
$(x-a)^2+(y-b)^2\leq x^2+y^2$
$2ax+2by\geq a^2+b^2$
等價於詢問所有圓心與$(2a,2b)$的點積的最小值是否小於$a^2+b^2$。
考慮將修改操作二進位制分組,分成$o(\log n)$段連續的修改區間,每一段建立上下凸殼維護,查詢時在凸殼上三分。
時間複雜度$o(n\log^2n)$,常數很小。
#include#include#define n 500010
int n,m,op,t,q[30],r1[30],r2[30],flag;double a,b,c,d;
struct pa[n],b[n],q1[n],q2[n];
inline bool cmp1(const p&a,const p&b)
inline double mul(const p&b)
inline void ask1(int l,int r)
r=m2-1;
}else
l=m1+1;}}}
inline void ask2(int l,int r)
r=m2-1;
}else
l=m1+1;}}}
inline void ask()
}int main()
c=a*a+b*b,a+=a,b+=b,ask();
if(flag)puts("no");else puts("yes"),d++;
}} return 0;
}
BZOJ 2564 水管局長加強版
給出乙個n nn個點m mm條邊的無向圖,每個詢問會讓你刪除一條x,y x,yx,y的邊或者是詢問你x,y x,yx,y間路徑最大值的最小值。n q 105 m 1 06,l imit 2500ms n,q leq 10 5,m leq10 6,limit 2500ms n,q 10 5,m 106...
bzoj 2961 共點圓 cdq分治
這道題目資料很弱不保證我的程式完全正確qaq。另外這道題目在2013年集訓隊 中有提到。以下是窩的口胡 對於乙個點 x0,y0 和乙個圓心為 x,y 的圓,顯然當 x0 x 2 y0 y 2 x 2 y 2時點在圓內,化簡得到 2y y0 2x x0 x0 2 y0 2,然後可以把2y0除到右邊去,...
BZOJ2961 共點圓 CDQ分治
bzoj 其實就是推一下圓的式子 長成這個樣子 假設要查詢的點是 x,y 某個圓心是 p,q x p 2 y q 2 leq p 2 q 2 變成 fracp frac leq q 那麼乙個點合法就要對所有圓心都滿足上面這個式子 很明顯拿斜率截就好啦 然後cdq維護上下凸包 附 cdq維護凸包過程 ...