k-d树
DZYO
Never stop
展开
-
bzoj4520: [Cqoi2016]K远点对
Description已知平面内 N 个点的坐标,求欧氏距离下的第 K 远点对。Input输入文件第一行为用空格隔开的两个整数 N, K。接下来 N 行,每行两个整数 X,Y,表示一个点 的坐标。1 < = N < = 100000, 1 < = K < = 100, K < = N*(N−1)/2 , 0 < = X, Y < 2^31。 Output输出文件第一行为一个整数,表示原创 2017-04-07 20:34:17 · 409 阅读 · 0 评论 -
BZOJ5223: [Lydsy2017省队十连测]有理有据题(KD树)
传送门题解:KD树支持矩阵加1,矩阵赋0,查询历史最大值。时间复杂度O((m+A)n+Clogn+qn)O((m+A)\sqrt{n} + C \log n + qn)O((m+A)n+Clogn+qn)。代码标记用了二元组,没把常数压下去。。#include <bits/stdc++.h>using namespace std;const int RLEN=1&l...原创 2018-09-28 10:49:41 · 338 阅读 · 0 评论 -
BJ模拟:传送门(KD树)
传送门题解: 注意到这是一个DAGDAGDAG,按照拓扑序进行DP。直接上KDKDKD树即可,记得加玄学剪枝。#include <bits/stdc++.h>using namespace std;typedef long long LL;typedef pair <int,int> pii;const int RLEN=1<<18|1;...原创 2018-04-10 14:16:48 · 161 阅读 · 0 评论 -
HDU5420:Victor and Proposition(KD树)
传送门题解: 这是经典的KD树模型,所以直接KD树优化建边即可。不过需要注意的是KD树上的点不能是原来的点,要新建一个映射点连向原来的点,因为原来的点如果增加了本来没有的连边会对答案有影响。。(刚才搜了搜好像全是线段树?? 赶紧去学一学)upt:: 线段树做法,可持久化线段树合并,比kd树好打多了。。 Code : https://paste.ubuntu.com/26511原创 2018-02-03 12:59:35 · 279 阅读 · 0 评论 -
BZOJ2674: Attack(KDTree+线段树/整体二分)
传送门题意: 给许多带点权的点(xi,yi)(x_i,y_i),要求支持交换两点点权或询问矩阵第kk大。题解: 比较直观的做法就是KDTreeKDTree+线段树了,实际上跑得也挺快的。不过这道题有更方便的做法:整体二分。把原点当做加入一个点,交换当做加入一个点并删除一个点,修改间相互独立,而且对答案的贡献是他们的和,那么可以直接上了。#include<bits/stdc++.h>using原创 2017-12-28 07:48:37 · 340 阅读 · 0 评论 -
BZOJ2989: 数列(二进制分组/KDtree+替罪羊)
传送门题意: (稍微转化一下)每次加一些点,在一个正方形内查询点的个数。题解: 先坐标旋转做成矩形查询,然后比较直观的是KDtree+替罪羊暴力重建KDtree+替罪羊暴力重建。 Code:https://paste.ubuntu.com/26306229/还有一种厉害的方法:分治。比较明显的是可以CDQ分治+ 主席树,另外还可以对这些点对做二进制分组。每次暴力重建的复杂度为原创 2018-01-03 21:19:57 · 788 阅读 · 0 评论 -
BZOJ4154:Generating Synergy (KDtree)
传送门题意: 给定一棵以1为根的有根树,初始所有节点颜色为1,每次将距离节点a不超过l的a的子节点染成c,或询问点a的颜色题解:KDtree 看完这道题题解,我只想说:还有这种操作???想了半天的点分治,后来发现看错题了,原来只有子节点。。。KDtree: 首先将每个点的横坐标看做dfs序,那么修改在一个区间内进行,由于这些点只有部分点会被修改,而修改的点的depdep又是一段连续的区间,就像原创 2017-10-03 17:29:53 · 368 阅读 · 0 评论 -
BZOJ2648:SJY摆棋子(KDtree)
传送门 这道题和BZOJ2716一样:http://blog.csdn.net/qq_35649707/article/details/77800032不过CDQ过不了。。。 于是写了KD树。。其实就是一个玄学DFS减枝。#include<bits/stdc++.h>using namespace std;struct IO{ streambuf *ib,*ob; inline原创 2017-09-30 10:45:14 · 336 阅读 · 0 评论 -
bzoj4822[CQOI2017]:老C的任务(树状数组/k-dtree)
题解:树状数组或k-d树。树状数组:将数据离散化后将询问拆成左x和右x。依次加入点查询即可。k-d树:裸题,但会被卡20分。#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<string>#include<algorithm>#include<cmath>using namespac原创 2017-04-29 17:03:37 · 939 阅读 · 0 评论 -
2017集训队作业自选题#111: 资源采集(KD树)
题解:KDtree查询矩阵,如果最后一次修改的时间全部一样,那么直接在子树里讨论两种情况,线段树合并支持查询。否则暴力递归删除子树标记,容易知道复杂度为O(nnlogn)O(n \sqrt{n} \log n)O(nnlogn)。#include <bits/stdc++.h>using namespace std;typedef long long LL;const...原创 2018-11-01 14:51:15 · 272 阅读 · 0 评论