【kd-tree】hdu5992 Finding Hotels】的更多相关文章

比较裸的kd-tree,但是比较考验剪枝. 貌似除了经典的矩形距离剪枝之外, 还必须加个剪枝是某个矩形内的最小价格如果大于价格限制的话,则剪枝. #include<cstdio> #include<cmath> #include<algorithm> using namespace std; #define N 200010 #define EPS 0.00000001 #define INF 1000000000000000007.0 #define KD 2 str…
原题链接 Description 给出个二维平面上的点,每个点有权值.次询问,求所有权值小于等于的点中,距离坐标的欧几里得距离最小的点.如果有多个满足条件的点,输出最靠前的一个. Solution 拿k-d树搞一搞就好啦. 如果一个子树代表的区域中所有点的权值都大于c,或者到所有点的距离都大于当前答案,就跳过不做. Code //Finding Hotels #include <cstdio> #include <cstring> #include <algorithm>…
题目链接: Finding Hotels Time Limit: 2000/1000 MS (Java/Others)     Memory Limit: 102400/102400 K (Java/Others) Problem Description There are N hotels all over the world. Each hotel has a location and a price. M guests want to find a hotel with an accept…
[题目链接] http://poj.org/problem?id=3740 [算法] Dancing Links算法解精确覆盖问题 详见这篇文章 : https://www.cnblogs.com/grenet/p/3145800.html [代码] #include <algorithm> #include <bitset> #include <cctype> #include <cerrno> #include <clocale> #incl…
题意 给出n个酒店的坐标和价格,然后m个查询,每个查询给出一个人的坐标和能承受的最大价格,然后找出在他价格承受范围以内,距离他最近的宾馆,如果有多个,那么输出第一个 分析 kd树的模板题 #include <cstdio> #include <cstring> #include <algorithm> #include <iostream> #include <cmath> using namespace std; +; ; typedef lo…
题目: Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center). For example, this binary tree is symmetric: 1 / \ 2 2 / \ / \ 3 4 4 3 But the following is not: 1 / \ 2 2 \ \ 3 3 Note:Bonus points if you could solve…
题目: Given two binary trees, write a function to check if they are equal or not. Two binary trees are considered equal if they are structurally identical and the nodes have the same value. 代码: /** * Definition for a binary tree node. * struct TreeNode…
题目描述 给定一个N个结点的无向树,树中的结点按照1...N编号,树中的边按照1...N − 1编号,每条边都赋予一个权值.你需要编写程序支持以下三种操作: 1.    CHANGE i v:将i号边的权值改为v. 2.    NEGATE a b:将结点a到结点b路径上每条边权值取相反数.例如NEGATE(-3)=3, NEGATE(3)=-3. 3.    QUERY a b:返回结点a到结点b路径上权值最大边的权值. 输入 第一行为N(N ≤ 105),代表树中结点的个数. 接下来N −…
题意 给定一棵以1为根的有根树,初始所有节点颜色为1,每次将距离节点a不超过l的a的子节点染成c,或询问点a的颜色 分析 我们以dfs序为横坐标,深度为纵坐标,建kd树.我们每次更新,都是在kd树中更新一个矩形,横坐标为[st[a],en[a]],纵坐标[depth[a],depth[a]+l].那么就相当于线段树的区间更新,我们需要给它打个标记. #include <cstdio> #include <cstring> #include <algorithm> #in…
题意 给出一个长度为n的序列,给出M个询问:在[l,r]之间找到一个在这个区间里只出现过一次的数,并且要求找的这个数尽可能大.如果找不到这样的数,则直接输出0.我会采取一些措施强制在线. 分析 预处理出pre[i],nxt[i]分别代表左边离它最近的相同数字的坐标,nxt[i]代表右边离它最近的相同数组的坐标.那么我们每次查询在[l,r]内,找出一个最大的数字且它的pre[i]<l,nxt[i]>r.我们如何用kd树解决这个问题呢?我们用三维的kd树来处理,第一维为下标i,第二维为pre[i]…