【HDOJ】2966 In case of failure
KD树,这东西其实在ML经常被使用,不过30s的时限还是第一次见。
/* 2966 */
#include <iostream>
#include <string>
#include <map>
#include <queue>
#include <stack>
#include <set>
#include <vector>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <ctime>
#include <cstring>
#include <climits>
#include <cctype>
using namespace std; typedef struct {
int x, y;
} Point_t; typedef struct {
int axis;
Point_t p;
int l, r;
} node_t; const int maxn = 1e5+;
Point_t P[maxn], P2[maxn];
node_t nd[maxn];
int L;
__int64 ans; __int64 Eucl(Point_t a, Point_t b) {
return 1LL*(a.x-b.x)*(a.x-b.x) + 1LL*(a.y-b.y)*(a.y-b.y);
} bool compx(const Point_t &a, const Point_t &b) {
return a.x < b.x;
} bool compy(const Point_t &a, const Point_t &b) {
return a.y < b.y;
} void newNode() {
++L;
nd[L].l = nd[L].r = ;
} int create_KD(int l, int r, int d) {
if (l > r)
return ;
newNode();
int rt = L;
nd[rt].axis = d&;
if (l == r) {
nd[rt].p = P[l];
return rt;
}
if (d & )
sort(P+l, P+r+, compy);
else
sort(P+l, P+r+, compx);
int mid = (l+r)>>;
nd[rt].p = P[mid];
nd[rt].l = create_KD(l, mid-, d+);
nd[rt].r = create_KD(mid+, r, d+);
return rt;
} void cal(int rt, Point_t p) {
if (rt == )
return ;
int i, j, k; __int64 d = Eucl(nd[rt].p, p);
if (d && d<ans)
ans = d; if (nd[rt].axis) {
j = nd[rt].p.y;
k = p.y;
} else {
j = nd[rt].p.x;
k = p.x;
} if (k <= j)
cal(nd[rt].l, p);
else
cal(nd[rt].r, p); if (1LL*(j-k)*(j-k) < ans) {
if (k <= j)
cal(nd[rt].r, p);
else
cal(nd[rt].l, p);
}
} int main() {
int t, n;
int i, j, k; #ifndef ONLINE_JUDGE
freopen("data.in", "r", stdin);
freopen("data.out", "w", stdout);
#endif scanf("%d", &t);
while (t--) {
scanf("%d", &n);
for (i=; i<n; ++i) {
scanf("%d %d", &P[i].x, &P[i].y);
P2[i] = P[i];
}
L = ;
int rt = create_KD(, n-, );
for (i=; i<n; ++i) {
ans = LLONG_MAX;
cal(rt, P2[i]);
printf("%I64d\n", ans);
}
} #ifndef ONLINE_JUDGE
printf("time = %d\n", (int)(clock()));
#endif return ;
}
【HDOJ】2966 In case of failure的更多相关文章
- 【HDOJ】4729 An Easy Problem for Elfness
其实是求树上的路径间的数据第K大的题目.果断主席树 + LCA.初始流量是这条路径上的最小值.若a<=b,显然直接为s->t建立pipe可以使流量最优:否则,对[0, 10**4]二分得到 ...
- 【HDOJ】【3480】Division
DP/四边形不等式 要求将一个可重集S分成M个子集,求子集的极差的平方和最小是多少…… 首先我们先将这N个数排序,容易想到每个自己都对应着这个有序数组中的一段……而不会是互相穿插着= =因为交换一下明 ...
- 【HDOJ】【3068】最长回文
Manacher算法 Manacher模板题…… //HDOJ 3068 #include<cstdio> #include<cstring> #include<cstd ...
- 【HDOJ】4373 Mysterious For
1. 题目描述有两种不同类型的循环,并给出一个由1.2组成的序列,表示嵌套的循环类型.问这样组着的循环一共需要多少次循环?并将结果模364875103. 2.基本思路显然,每当遇到一个类型1的序列,即 ...
- 【HDOJ】4358 Boring counting
基本思路是将树形结构转线性结构,因为查询的是从任意结点到叶子结点的路径.从而将每个查询转换成区间,表示从该结点到叶子结点的路径.离线做,按照右边界升序排序.利用树状数组区间修改.树状数组表示有K个数据 ...
- 【HDOJ】4351 Digital root
digital root = n==0 ? 0 : n%9==0 ? 9:n%9;可以简单证明一下n = a0*n^0 + a1*n^1 + ... + ak * n^kn%9 = a0+a1+..+ ...
- 【HDOJ】3727 Jewel
静态区间第K大值.主席树和划分树都可解. /* 3727 */ #include <iostream> #include <sstream> #include <stri ...
- 【HDOJ】3473 Minimum Sum
划分树解.主席树解MLE. /* 3473 */ #include <iostream> #include <sstream> #include <string> ...
- 【HDOJ】4341 Gold miner
分组01背包.在一条直线上的点归为一组. /* 4341 */ #include <iostream> #include <sstream> #include <stri ...
随机推荐
- RedHat搭建IPA-Server
ipa-server是红帽身份验证的一个完整解决方案,上游的开源项目是freeIPA,它本身不提供具体功能,而是整合了389-ds.ipa-server-dns.krb5-server等核心软件包,形 ...
- Bash从路径中获取文件名
#!/bin/bash basename /etc/hosts
- memcache分布式实现、memcache分布…
Memcache的分布式介绍 memcached虽然称为"分布式"缓存服务器,但服务器端并没有"分布式"功能.服务器端仅包括内存存储功能,其实现非常简单.至于m ...
- java反射的应用+mybatis+spring动态生成数据库表
最近接触了一个类似于代码生成工具的活.思路是,通过java的反射机制得到类的字段和字段类型, 从而可以创建一个map集合存储表名(由类名决定的特殊结构字符串),表字段(由类变量确定),表字段类型(由变 ...
- 文件夹IsShow字段为空
IsShow为YesNo字段,默认值为Yes:在Library中新建一个文件的时候会给出默认值yes,但是新建一个文件夹的时候,默认为空,所以f.Item["IsShow"]为空, ...
- Java的jLinqer包介绍
1.介绍 熟悉C#的lambda 表达式,想要使用 LINQ 在 Java,是个问题,虽然 Java8用函数式接口已经实现了部分lambda 表达式,但是还是不够灵活. 2.Linqer简介 Linq ...
- window.event对象详细介绍
1.event代表事件的状态,例如触发event对象的元素.鼠标的位置及状态.按下的键等等.event对象只在事件发生的过程中才有效.event的某些属性只对特定的事件有意义.比如,fromEleme ...
- [转载]Oracle基础知识
一.oracle安装过程略 二.sys用户和system用户 (1)sys用户是超级用户,具有最高权限,具有sysdba角色,有create database的权限 默认密码是change_onins ...
- redis【摘自网上,只为以后查看】
ubuntu安装启动redis 1.下载安装 cd /tmp wget http://redis.googlecode.com/files/redis-2.2.13.tar.gz tar -zxf r ...
- Gulp(一)
一.简介 gulp 是基于 Nodejs 的自动任务运行器,能自动化地完成javascript/coffee/sass/less/html/image/css等文件的的测试.检查.合并.压缩.格式化. ...