题面 BZOJ传送门 思路 首先考虑一个点$(x_0,y_0)$什么时候在一个圆$(x_1,y_1,\sqrt{x_1^2+y_1^2})$内 显然有:$x_1^2+y_1^2\geq (x_0-x_1)^2+(y_0-y_1)^2$ 化简:$2x_0x_1+2y_0y_1\geq x_0^2+y_0^2$ 所有含$x_1,y_1$的项挪到同一边,除掉一个$2y_0$(假设它是正的),得到: $y_1\geq -\frac{x_0}{y_0}x_1+\frac{x_0^2+y_0^2}{2y_0…
题面 bzoj 其实就是推一下圆的式子 长成这个样子 假设要查询的点是(x, y) 某个圆心是(p, q) \((x - p)^2 + (y - q)^2 \leq p^2 + q^2\) 变成 \(-\frac{2x}{2y}p + \frac{x^2+y^2}{2y} \leq q\) 那么一个点合法就要对所有圆心都满足上面这个式子 很明显拿斜率截就好啦 然后cdq维护上下凸包 附:cdq维护凸包过程 void cdq(int L, int R){ if(L == R) return ; i…
题面 传送门 题解 这题解法真是多啊--据说可以圆反演转化为动态插入半平面并判断给定点是否在半平面交中,或者化一下改成给定点判断是否所有点都在某一个半平面内-- 鉴于圆反演我也不会,这里讲一下直接推的好了 如果一个圆的圆心是\((a,b)\),询问点是\((x,y)\),那么这个询问点在圆心上的条件就是 \[ \begin{aligned} (x-a)^2+(y-b)^2\le a^2+b^2 \\ x^2+y^2\le 2ax+2by \\ b\ge -\frac{x}{y}a+\frac{x…
/* 可以发现可行的圆心相对于我们要查询的点是在一个半平面上, 然后我们要做的就是动态维护凸壳然后用这个半平面去切它 看看是否是在合法的那一面 然后cdq分治就可以了 代码基本是抄的, */ #include<cstdio> #include<algorithm> #include<cstring> #include<queue> #include<iostream> #include<cmath> #define ll long l…
题解: 比较水的一道题 首先我们化简一下式子发现是维护xxo+yyo的最值 显然是用凸包来做 我们可以直接用支持插入删除的凸包 也是nlogn的 因为没有强制在线,我们也可以cdq,考虑前面一半对答案的影响,再考虑后面的 时间复杂度nlog^2n 后面这道强制在线当然可以直接平衡树维护 但是有一种神奇的方法叫做二进制分组 也是比较好理解的 就是在不断重构 时间复杂度 nlog^3n 注意一下,运用cdq分治和二进制分组的前提是 修改操作互不影响 代码:…
国际惯例的题面:我们考虑大力DP.首先重新定义代价为:1e13*选择数量-(总高度+总补偿).这样我们只需要一个long long就能维护.然后重新定义高度为heighti - i,这样我们能选择高度相同的点,同时可以把无论如何也不会被选择的点扔掉(这样他们的高度<0).之后就是转移,我们枚举i前面的被选择的点j,我们要满足的东西有:hj<=hi.考虑我们再次选择一个点会产生怎样的代价,显然最终的答案一定是一个阶梯状的东西,所以我们选择了i之后之后所有点的高度相对于仅选择j都会上升(hi-hj…
好久没发了 CDQ分治,具体做法见XHR的论文… /************************************************************** Problem: 2961 User: zhuohan123 Language: C++ Result: Accepted Time:5060 ms Memory:41704 kb ****************************************************************/ #inc…
Description 传送门 Solution 考虑对于每一个点: 设圆的坐标为(x,y),点的坐标为(x0,y0).依题意得,当一个点在圆里,需要满足(x-x0)2+(y-y0)2<=x2+y2. 化简得x02+y02<=2x0*x+2y0*y. 当y0>0,x*(-x0/y0)+0.5y0+x02/(2*y0)<=y,这是一个半平面的式子:当y0<0时同理,但是要变号. 所以对于某个点(x0,y0),我们构造出在它前面所有圆心的凸包.凸包应分为上下. 通过以上式子我们可…
题目大意 两种操作 1)插入一个过原点的圆 2)询问一个点是否在所有的圆中 分析 在圆中则在半径范围内 设圆心 \(x,y\) 查询点\(x_0,y_0\) 则\(\sqrt{(x-x_0)^2+(y-y_0)^2} <= \sqrt{x^2+y^2}\) 解得\(2x_0 * x+2y_0 *y -(x_0^2+y_0^2)>=0\) x,y 为变量 是个半平面的式子 题意变成 1)插入一个点 2)询问是否所有点都在半平面内 插入互不干扰 点都在半平面内当且仅当凸包在半平面内 cdq,维护上…
更新:此题我的代码设置eps=1e-8会WA,现在改为1e-9貌似T了 此题网上的大部分做法是cdq分治+凸包,然而我觉得太烦了,于是自己口胡了一个k-d树做法: 加入一个圆$(x,y)$,直接在k-d树上加入这个点即可,注意要打rebuild否则会T. 查询一个点$(x_0,y_0)$是否在所有的圆上时: 我们设当前需要判断一个圆$(x,y)$是否覆盖该点,通过简单的分析,可以列出以下式子: $(x-x_0)^2+(y-y_0)^2≤x_0^2+y_0^2$ 我们不妨设$y_0>0$通过简单变…