BZOJ2626: JZPFAR】的更多相关文章

用堆记录答案.看看当前点是否比堆顶更优. #include<cstdio> #include<queue> #include<cstring> #include<cmath> #include<algorithm> using namespace std; typedef double db; #define N 100001 #define EPS 0.0000001 #define INF 999999999999999999.0 #defi…
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2626 题解:裸K-Dtree,最大值?自己yy一下估价函数就好了. 两题居然是同一个错误,真是too naive... 代码: #include<cstdio> #include<cstdlib> #include<cmath> #include<cstring> #include<algorithm> #include<iostrea…
bzoj1941: [Sdoi2010]Hide and Seekbzoj2626: JZPFARbzoj4520: [Cqoi2016]K远点对bzoj2989: 数列bzoj2850: 巧克力王国 bzoj4605: 崂山白花蛇草水…
[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…
传送门--Luogu 传送门--BZOJ2154 BZOJ2693是权限题 其中JZPFAR是多组询问,Crash的数字表格是单组询问 先推式子(默认\(N \leq M\),所有分数下取整) \(\begin{align*} \sum\limits_{i=1}^N \sum\limits_{j=1}^M lcm(i,j) & = \sum\limits_{i=1}^N \sum\limits_{j=1}^M \frac{ij}{gcd(i,j)} \\ & = \sum\limits_{…
KD-Tree 0.0找第k大…… 裸KD-Tree……跟之前那道找最近的k个点大同小异 一开始理解错:第K大是第K远……不是第K近……(Tunix你个sb 感觉容易出错的是0号点= =边界情况需要仔细处理……根据题意而定的,比如这题就必须将0号点的距离设置成最近……比如-2……(因为我一开始向堆里加的占位点的距离是-1 /************************************************************** Problem: 2626 User: Tuni…
[国家集训队2012]JZPFAR 题目 平面上有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_i,表示一个询问.…
题目链接: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> #…
嘟嘟嘟 k-d tree模板之二:查询第k大距离.(所以是怎么上黑的) 因为k-d tree的查询就是暴力嘛,所以我就想到了一个很暴力的做法:每一次查询用一个长度为k的优先队列维护.按距离递增,编号递减的方式排序. 然后查询的时候,如果队列长度大于k了,就尝试用当前节点更新队首. 刚开始没看到k的范围只有20,以为也是1e5,所以觉得这方法不行,最后还是看了题解-- 结果题解做法和我几乎一样,只不过有点优化: 1.先往队列里放入k个极小值,就能避免队空以及判断长度等问题. 2.查询的时候优先往估…
题面 初见K-D Tree 其实这样的题(欧几里得距离第$x$近点对)不应该用K-D Tree做,因为会被构造数据卡成$O(n^2)$,随机的另说. 但是并没有找到合适的K-D Tree的题(区域统计),于是就凑活着写了,代码极丑预警 // luogu-judger-enable-o2 #include<queue> #include<cstdio> #include<cctype> #include<cstring> #include<algorit…
传送门 分析 首先给大家推荐一个非常好的KDTree笔记 here 此题就是y9ong优先队列维护距离最远的k个,最后输出队首元素即可 估价函数就是max和min两点到 询问点的最远距离 代码 #include<iostream> #include<cstdio> #include<cstring> #include<string> #include<algorithm> #include<cctype> #include<cm…
题面不符?-- #include <algorithm> #include <iostream> #include <cstdio> using namespace std; typedef long long ll; int n, m, nowD, rot, din, kk; const ll oo=9e18; struct Point{ int d[2], mn[2], mx[2], id, idmin, l, r; int & operator[](int…
题目大意: 平面上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…
和3053差不多,把pair first做成负数就可以用大根堆维护了 注意:要开long long:比较的时候因为编号也占权重所以要比较pair:编号不是mid!不是mid!是初始输入的那个编号!搞混调了很久 #include<iostream> #include<cstdio> #include<algorithm> #include<cmath> #include<queue> #include<map> using namesp…
传送门 类似于p4357 不过因为距离相等的时候要优先选择序号小的,所以要重载一下运算符 //minamoto #include<bits/stdc++.h> #define R register #define ll long long #define inf 0x3f3f3f3f #define fp(i,a,b) for(R int i=a,I=b+1;i<I;++i) #define fd(i,a,b) for(R int i=a,I=b-1;i>I;--i) #defin…
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…
时间限制:5.0s   内存限制:256.0MB   总提交次数:547   AC次数:137   平均分:40.31 将本题分享到:        查看未格式化的试题   提交   试题讨论 试题来源 2012中国国家集训队命题答辩 问题描述 平面上有n个点.现在有m次询问,每次给定一个点(px, py)和一个整数k,输出n个点中离(px, py)的距离第k大的点的标号.如果有两个(或多个)点距离(px, py)相同,那么认为标号较小的点距离较大. 输入格式 第一行,一个整数n,表示点的个数.…
传送门 要维护平面上点的信息,所以可以用KD-tree来维护,然后维护一个大小为\(k\)的堆,每次从根开始遍历,遇到一个点就看能不能作为前\(k\)远的点,也就是看能不能把堆中最近的点给替换掉.如果那个点在KD-tree上的控制区域中离要求的点的最远的点的距离比当前第\(k\)远距离小就不用访问了 #include<algorithm> #include<iostream> #include<cstring> #include<cstdlib> #incl…
KD-Tree这玩意还真的是有趣啊.... (基本完全不理解) 只能谈一点自己的对KD-Tree的了解了. 首先这个玩意就是个暴力... 他的结构有点类似二叉搜索树 每一层都是以一个维度作为划分标准. 我们对于当前层,选择所有剩余点中,该维度比较中间的那个点作为基准点,比他小(这一维度)就放到左子树,不然右子树. 然后维度的选取是交替选取 就比如说,我们第一层是按照第一个维度,第二层是第二维度,第三层是第一维度....以此类推,直到没有剩余的点为止. 那么构造的时候,由于我们涉及到要把大于某个数…
嘟嘟嘟 做过[国家集训队]JZPFAR这道题的话,这题就不难了. 我们维护一个长度为\(k\)的小根堆,在加入第\(i\)个点之前,用\([1, i - 1]\)这些点离点\(i\)的距离更新答案.这样也能保证每一对点之间的距离一定只算了一次. #include<cstdio> #include<iostream> #include<cmath> #include<algorithm> #include<cstring> #include<…
以前其实学过的但是不会拍扁重构--所以这几天学了一下 \(K-D\ Tree\) 的正确打开姿势. \(K\) 维 \(K-D\ Tree\) 的单次操作最坏时间复杂度为 \(O(k\times n^{1-\frac 1k})\) 1.[Violet]天使玩偶/SJY摆棋子 二维 \(K-D\ Tree\). 不过要暴力重构...我终于会了,但不开 \(O_2\) 过不去... \(Code\ Below:\) // luogu-judger-enable-o2 #include <bits/s…
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…
听说k-d tree是一个骗分的好东西?(但是复杂度差评??? 还听说绍一的kdt常数特别小? KDT是什么 KDT的全称是k-degree tree,顾名思义,这是一种处理多维空间的数据结构. 例如,给定一张二维图,每次会插入一些点,并且查询一个矩形区域内的点数. 上面这个问题可以离线cdq分治,也可以离线离散化处理,这两个做法可以参见初涉二维数点问题.不过这就是2-d tree基础的应用,使得我们可以在线处理这个问题. 网上关于KDT的解释博客有很多,但我认为在了解了k-d tree的作用之…
转载于http://blog.csdn.net/creationaugust/article/details/513876231000:A+B 1001:平面图最小割,转对偶图最短路 1002:矩阵树定理,也可以通过推矩阵的递推关系得到递推式 1003:最短路+DP 1007:半平面交 1008:组合数学,需要高精 1010:斜率优化/四边形不等式推决策单调性 1012:线段树 1014:Splay维护字符串的Hash值 1016:矩阵树定理,相同权值压联通块,对一个联通块用一次矩阵树定理计算方…
Lockey的瞎理解 抄了一遍板子又水了俩题,感觉对KD-tree 稍稍理解了一点儿,唠叨一下(二维的KD-tree),如有错误请指出(Lockey 洗脸恭听) 普通平衡树维护的是一维的序列,但对于二维(可以建平衡树套平衡树,但不好维护)甚至多维就凉了,所以就用到了KD-tree这一神奇的数据结构(伪装“砖家”ing-) KD-tree 将二维的平面分别按x,y轮流划分,将平面建成一棵BST ,然后查找,在树中维护当前点所代表的值以及记录以它为根的子树信息(最大值,最小值,值的和,等等), 而通…
KD-Tree,用来解决多维空间中的问题,其实就是优化暴力(逃 一般cdq能做的它都能做,而且...既然是优化暴力,那就学习一下了 对与几个n维点,我们将它每一维分割,建立一颗二叉树,方便我们搜索剪枝 它好像插入比较麻烦,和替罪羊一样暴力重构,博主蒟蒻不会啦 KD-Tree能解决的问题:平面上点对最小,最大距离,k大距离(包括曼哈顿距离和欧式距离) 当然这是我的理解,可能会有偏差 KD-Tree基本模板: struct node{ int d[2],l,r,mx[2],mn[2],id; fri…
2021.07.09 K-D树 前置知识 1.二叉搜索树 2.总是很长的替罪羊树 K-D树 建树 K-D树具有二叉搜索树的形态,对于每一个分类标准,小于标准的节点在父节点左边,大于标准的节点在父节点右边. 例如:有三个坐标(2,2),(5,1),(6,4),x轴以5为标准,则(2,2)为(5,1)左儿子,(6,4)为(5,1)右儿子. 常见的建树方法有两个: 1.交替 从根节点出发,依次把k个维度作主要关键词. 例如:第一层以x轴坐标为关键词,第二层以y轴坐标为关键词,第三层还是以x轴坐标为关键…