BZOJ 2626: JZPFAR KDtree + 堆】的更多相关文章

Code: #include<bits/stdc++.h> #define maxn 200000 #define inf 1000000000000000 #define mid ((l+r)>>1) #define rson(x) (t[x].ch[1]) #define lson(x) (t[x].ch[0]) #define ll long long using namespace std; void setIO(string s) { string in = s + &q…
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2626 题意:平面上有n个点.现在有m次询问,每次给定一个点(px, py)和一个整数k,输出n个点中离(px, py)的距离第k大的点的标号.如果有两个(或多个)点距离(px, py)相同,那么认为标号较小的点距离较大. 思路:对n个点做KDtree. #include<algorithm> #include<cstdio> #include<cmath> #…
和3053差不多,把pair first做成负数就可以用大根堆维护了 注意:要开long long:比较的时候因为编号也占权重所以要比较pair:编号不是mid!不是mid!是初始输入的那个编号!搞混调了很久 #include<iostream> #include<cstdio> #include<algorithm> #include<cmath> #include<queue> #include<map> using namesp…
[BZOJ2626]JZPFAR Description 平面上有n个点.现在有m次询问,每次给定一个点(px, py)和一个整数k,输出n个点中离(px, py)的距离第k大的点的标号.如果有两个(或多个)点距离(px, py)相同,那么认为标号较小的点距离较大. Input 第一行,一个整数n,表示点的个数. 下面n行,每行两个整数x_i, y_i,表示n个点的坐标.点的标号按照输入顺序,分别为1..n. 下面一行,一个整数m,表示询问个数. 下面m行,每行三个整数px_i, py_i, k…
题目大意: 平面上n个点,每次给出一个点,求这个点的k远点 题解: 什么叫做k远点呢... 1 2 3 4 5中5是第一远,4是第二远... 看来我语文学的不好 那么我们直接上k-D Tree求k邻近的方式求k远离即可 #include <queue> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; typedef long long ll; inl…
题意: 二维平面n个点 每次给出一个点询问距离第k小的点. SOL: kdtree裸题,抄了一发别人的模板...二维割起来还是非常显然的.膜rzz的论文. 不多说了吧.... Code: /*========================================================================== # Last modified: 2016-03-18 20:26 # Filename: 2626.cpp # Description: =========…
时间限制:5.0s   内存限制:256.0MB   总提交次数:547   AC次数:137   平均分:40.31 将本题分享到:        查看未格式化的试题   提交   试题讨论 试题来源 2012中国国家集训队命题答辩 问题描述 平面上有n个点.现在有m次询问,每次给定一个点(px, py)和一个整数k,输出n个点中离(px, py)的距离第k大的点的标号.如果有两个(或多个)点距离(px, py)相同,那么认为标号较小的点距离较大. 输入格式 第一行,一个整数n,表示点的个数.…
4520: [Cqoi2016]K远点对 Time Limit: 30 Sec  Memory Limit: 512 MBSubmit: 490  Solved: 237[Submit][Status][Discuss] Description 已知平面内 N 个点的坐标,求欧氏距离下的第 K 远点对. Input 输入文件第一行为用空格隔开的两个整数 N, K.接下来 N 行,每行两个整数 X,Y,表示一个点 的坐标.1 < =  N < =  100000, 1 < =  K <…
堆维护第k大,每个点KD-Tree上A*式查询较远点,跑得飞快,复杂度玄学. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm> #include<queue> #include<vector> using namespace std; #defin…
[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 输出文件第一行为一个整数,表示第 K 远点对…
KD-Tree这玩意还真的是有趣啊.... (基本完全不理解) 只能谈一点自己的对KD-Tree的了解了. 首先这个玩意就是个暴力... 他的结构有点类似二叉搜索树 每一层都是以一个维度作为划分标准. 我们对于当前层,选择所有剩余点中,该维度比较中间的那个点作为基准点,比他小(这一维度)就放到左子树,不然右子树. 然后维度的选取是交替选取 就比如说,我们第一层是按照第一个维度,第二层是第二维度,第三层是第一维度....以此类推,直到没有剩余的点为止. 那么构造的时候,由于我们涉及到要把大于某个数…
1078: [SCOI2008]斜堆 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 770  Solved: 422[Submit][Status][Discuss] Description 斜堆(skew heap)是一种常用的数据结构.它也是二叉树,且满足与二叉堆相同的堆性质:每个非根结点的值都比它父亲大.因此在整棵斜堆中,根的值最小.但斜堆不必是平衡的,每个结点的左右儿子的大小关系也没有任何规定.在本题中,斜堆中各个元素的值均不相同. 在斜…
考虑乱搞,用矩形框圆放KD-Tree上,如果当前删除的圆和矩形有交就递归下去删.为防止被卡,将坐标系旋转一定角度即可.注意eps稍微设大一点,最好开上long double. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm> #include<queue> #…
一个堆和一个并查集对应,并且满足并查集中所有没有死的人等于堆中的人 /************************************************************** Problem: 1455 User: idy002 Language: C++ Result: Accepted Time:2688 ms Memory:32336 kb ****************************************************************/…
对于每个节点,要在其子树中选尽量多的节点,并且节点的权值和小于一个定值. 建立大根堆,每个节点从儿子节点合并,并弹出最大值直到和满足要求. /************************************************************** Problem: 2809 User: idy002 Language: C++ Result: Accepted Time:1224 ms Memory:6664 kb ******************************…
很好的一道题. 题意:给出长度为n的数列,选择k个互不相同的区间,满足每个区间长度在[L,R]内,求所有选择的区间和的总和最大是多少.(n,k<=5e5). 首先将区间和转化为前缀和之差,那么我们想要区间和的总和最大,一个朴素的想法是把所有满足限制的区间和排序,取最大的k个. 考虑每个右端点i,其中有效的左端点是[i-R+1,i-L+1].如果我们对于每个右端点都找到“当前”最大的区间和,那么把它们扔进大根堆里维护一下即可. 由于sum[i]一定,那么只要左端点的sum值越小越好,于是我们每次从…
1233: [Usaco2009Open]干草堆tower Description 奶牛们讨厌黑暗. 为了调整牛棚顶的电灯的亮度,Bessie必须建一座干草堆使得她能够爬上去够到灯泡 .一共有N大包的干草(1<=N<=100000)(从1到N编号)依靠传送带连续的传输进牛棚来.第i包干草有一个 宽度W_i(1<=w_i<=10000).所有的干草包的厚度和高度都为1. Bessie必须利用所有N包干草来建立起干草堆,并且按照他们进牛棚的顺序摆放.她可以相放多少包就放 多少包来建立起…
题目大意:给定一个数轴上n个点,每一个点有一种颜色,一共k种颜色.求一个最短的区间,包括全部k种颜色 卡了一段时间0.0 一開始想二分答案啥的 后来发现数据范围太大写不了0.0 后来去找题解才发现尼玛真巧妙 维护一个堆 将每种颜色的第一个珠子增加堆 然后不断把最左側的珠子取出,增加该种颜色的下一个 同一时候更新ans 果然这么大数据范围还是要用堆这样的常数小的数据结构啊0.0 我手写了堆却开了STL的queue 0.0 不要说我有病我仅仅是不习惯STL的堆罢了 #include<queue>…
[题目链接] 点击打开链接 [算法] 这题有一个性质 : 位于顶层的干草堆可以满足宽度最小且高度最高 根据这个性质,用单调队列优化DP,即可 [代码] #include<bits/stdc++.h> using namespace std; #define MAXN 100010 int i,n,head,tail; int a[MAXN],sum[MAXN],q[MAXN],f[MAXN],h[MAXN]; int main() { scanf("%d",&n);…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1078 考察斜堆的性质: 一个点如果没有左子树,也一定没有右子树: 看了这篇精美的博客:http://www.cppblog.com/MatoNo1/archive/2013/03/03/192131.html 对斜堆有了更多认识. 代码如下: #include<iostream> #include<cstdio> #include<cstring> #includ…
首先这题的$n^3$的DP是比较好想的 $f[i][j]$表示用前$i$包干草 且最顶层为第$j+1$包到第$i$包 所能达到的最大高度 然而数据范围还是太大了 因此我们需要去想一想有没有什么单调性 ---------------------------------------------------------------------------------------------------- 从其他人的题解中 可以看到一个结论 我们尽量使底层最短 便可逐渐达到最优解 然后再结合递推的思想去…
题面 小铭铭最近获得了一副新的桌游,游戏中需要用 m 个骑士攻占 n 个城池. 这 n 个城池用 1 到 n 的整数表示.除 1 号城池外,城池 i 会受到另一座城池 fi 的管辖, 其中 fi <i.也就是说,所有城池构成了一棵有根树.这 m 个骑士用 1 到 m 的整数表示,其 中第 i 个骑士的初始战斗力为 si,第一个攻击的城池为 ci. 每个城池有一个防御值 hi,如果一个骑士的战斗力大于等于城池的生命值,那么骑士就可 以占领这座城池:否则占领失败,骑士将在这座城池牺牲.占领一个城池以…
[题目分析] 明显的LCT维护连通性的题目. access的操作是比较巧妙的,可以把结点到根变成偏爱路径,而且保证了该点是链上深度最深的点. 而且需边的思想也很巧妙,保证了复杂度. 但是只能用于修改路径上的点的权值,不能用于修改整棵子树的信息. 相比Splay,只能说是阉割了修改信息的作用,而增加了删边,加边的操作. [代码] #include <cstdio> #include <cstring> #include <cstdlib> #include <cma…
题意 \(n(1 \le n \le 100000)\)个数放在一排,可以一走一些数(后面的数向前移),要求最大化\(a_i=i\)的数目. 分析 分析容易得到一个dp方程. 题解 \(d(i)\)表示前\(i\)个数且第\(i\)个数放在\(a_i\)位置的最大答案,则\(d(i) = max(d(j)+1) (j < i, a_j < a_i, j - a_j \le i-a_i)\),发现是一个三维偏序.然而这个三维偏序是可以变成二维偏序的. 由于\(j-a_j \le i-a_i, a…
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=1233 留坑.以后再来看看. (绝望,无奈,丧心...) (这个题的证明真的很诡异啊,看得我稀里糊涂的.)…
题目大意:给定一张无向图.每条边从两个方向走各有一个权值,求从点1往出走至少一步之后回到点1且不经过一条边多次的最短路 显然我们须要从点1出发走到某个和点1相邻的点上,然后沿最短路走到还有一个和点1相邻的点上,然后回到点1 那么我们将与点1相邻的点都设为关键点.然后将点1从图中删除.题目转化成了给定图上的一些关键点求近期点对 枚举每一个点显然会T 考虑每次将关键点划分为两个集合A,B.然后将A中的每一个点x的初始距离设为len(1,x),跑最短路,然后用B中的每一个点y的disy+len(y,1…
参考:https://www.cnblogs.com/N-C-Derek/archive/2012/07/11/usaco_09_open_tower.html 虽然长得很像斜率优化,但是应该不算-- 贪心是错的,对拍出好多异常情况 s[i]为前缀和,从顶向下dp;设f[i]为本层宽度,g[i]为这是第几层,转移是g[i]=max(g[j]+1||s[j]-s[i]>f=[j]&&j>i) 如果k>j,除非j不满足条件,否则j最优,用一个单调栈维护能做贡献的j即可 #in…
KD-Tree 0.0找第k大…… 裸KD-Tree……跟之前那道找最近的k个点大同小异 一开始理解错:第K大是第K远……不是第K近……(Tunix你个sb 感觉容易出错的是0号点= =边界情况需要仔细处理……根据题意而定的,比如这题就必须将0号点的距离设置成最近……比如-2……(因为我一开始向堆里加的占位点的距离是-1 /************************************************************** Problem: 2626 User: Tuni…
转载于http://blog.csdn.net/creationaugust/article/details/513876231000:A+B 1001:平面图最小割,转对偶图最短路 1002:矩阵树定理,也可以通过推矩阵的递推关系得到递推式 1003:最短路+DP 1007:半平面交 1008:组合数学,需要高精 1010:斜率优化/四边形不等式推决策单调性 1012:线段树 1014:Splay维护字符串的Hash值 1016:矩阵树定理,相同权值压联通块,对一个联通块用一次矩阵树定理计算方…
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem 10983 18765 Y 1036 [ZJOI2008]树的统计Count 5293 13132 Y 1588 [HNOI2002]营业额统计 5056 13607 1001 [BeiJing2006]狼抓兔子 4526 18386 Y 2002 [Hnoi2010]Bounce 弹飞绵羊 43…