假设当前询问点为$(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<cstdio> #include<al…
[BZOJ4140]共点圆加强版(二进制分组) 题面 BZOJ 题解 我卡精度卡了一天.... 之前不强制在线的做法是\(CDQ\)分治,维护一个凸壳就好了. 现在改成二进制分组,每次重建凸壳就好了.. #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<algorithm> #include&…
题目描述 在平面直角坐标系中,Wayne需要你完成n次操作,操作只有两种: 1.0 x y.表示在坐标系中加入一个以(x, y)为圆心且过原点的圆. 2.1 x y.表示询问点(x, y)是否在所有已加入的圆的内部(含圆周),且至少在一个圆内部(含圆周). 为了减少你的工作量,题目保证圆心严格在x轴上方(纵坐标为正),且横坐标非零. 输入格式 第1行一个整数n. 接下来n行,每行第一个数是0或1,分别表示两种操作. 接着有两个实数x和y,具体意义见题面. 输出格式 对于每个询问操作,如果点在所有…
F. String Set Queries time limit per test:3 seconds memory limit per test:768 megabytes input:standard input output:standard output You should process m queries over a set D of strings. Each query is one of three kinds: Add a string s to the set D. I…
这题其实可以cdq分治做,但是如果强制在线的话,这里有个牛逼方法叫二进制分组. 它的基本思想是把修改操作按二进制分组,遇到修改就在尾部加一个,并与之前的合并,比如之前有23(16+4+2+1)个,加了一个后就变成了24(16+8)个,遇到查询就在每个组内查询,再加起来就好了. #include <cstdio> #include <vector> #include <algorithm> using namespace std; #define M ((l+r)>…
题解: 比较水的一道题 首先我们化简一下式子发现是维护xxo+yyo的最值 显然是用凸包来做 我们可以直接用支持插入删除的凸包 也是nlogn的 因为没有强制在线,我们也可以cdq,考虑前面一半对答案的影响,再考虑后面的 时间复杂度nlog^2n 后面这道强制在线当然可以直接平衡树维护 但是有一种神奇的方法叫做二进制分组 也是比较好理解的 就是在不断重构 时间复杂度 nlog^3n 注意一下,运用cdq分治和二进制分组的前提是 修改操作互不影响 代码:…
[BZOJ3821/UOJ46]玄学(二进制分组,线段树) 题面 BZOJ UOJ 题解 呜,很好的题目啊QwQ. 离线做法大概可以线段树分治,或者直接点记录左右两次操作时的结果,两个除一下就可以直接计算. 强制在线的话,一般而言,分治在线就弄成二进制分组.把所有修改操作进行二进制分组,每次新加入一个修改操作的时候考虑和前面其他的操作合并,提前构出来线段树,按照次序插入.如果一个节点的左右儿子都填满了修改操作的话,那么把它的两个儿子的值进行合并.然而我们发现并不可能每个节点维护一棵线段树来表示所…
题意的转化挺巧妙的 可以联想到曼哈顿距离! 并且,所谓的修改还要查询历史版本,并且修改之间不动只算一次,不就是给平面上加一个点吗? 看成(x,a[x])的点 就是一个菱形区域 转切比雪夫距离,变成矩形区域 所以 平面单点加,矩形查询和 1.cdq分治 2.树套树(离散化都不用) 3.二进制分组+主席树 这里,大炮打蚊子,用二进制分组来写 加入的点按操作二进制分组,每个组用主席树维护这个平面,查询在logn上查询,合并暴力重构,256MB又没有删除,所以重构完了把原来的树垃圾回收 注意: 主席树垃…
ou should process m queries over a set D of strings. Each query is one of three kinds: Add a string s to the set D. It is guaranteed that the string s was not added before. Delete a string s from the set D. It is guaranteed that the string s is in th…
传送门 二进制分组入门题. 主席树写错调题2h+2h+2h+体验极差. 题意简述:给一堆点,支持加入一个点,询问有多少个点跟(x,y)(x,y)(x,y)曼哈顿距离不超过kkk. 思路:题目要求的是对于一个斜着的正方形的查询. 我们考虑转切比雪夫距离转成正常的正方形. 然后就变成了一个动态的二维数点问题. 这个时候已经可以上cdqcdqcdq分治+扫描线或者树套树切题啦. 然而还有一种叫做二进制分组的方法可以支持强制在线的操作. 我们考虑将修改分组,例如对于前19=16+2+119=16+2+1…