BZOJ 2648 / 2716 K-D Tree 模板题
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <ctime>
#include <cstdlib>
using namespace std;
typedef long long ll;
#define enter putchar('\n')
#define space putchar(' ')
template <class T>
void read(T &x){
char c;
bool op = 0;
while(c = getchar(), c > '9' || c < '0')
if(c == '-') op = 1;
x = c - '0';
while(c = getchar(), c >= '0' && c <= '9')
x = x * 10 + c - '0';
if(op) x = -x;
}
template <class T>
void write(T x){
if(x < 0) putchar('-'), x = -x;
if(x >= 10) write(x / 10);
putchar('0' + x % 10);
}
const int N = 1000005, D = 2, INF = 0x3f3f3f3f;
int n, m, tot, curD, root, ans;
int co[N][D], mi[N][D], ma[N][D], ls[N], rs[N];
struct point {
int co[D];
bool operator < (const point &b) const {
return co[curD] < b.co[curD];
}
} a[N];
void update(int fa, int son) {
for(int i = 0; i < D; i++) {
mi[fa][i] = min(mi[fa][i], mi[son][i]);
ma[fa][i] = max(ma[fa][i], ma[son][i]);
}
}
int build(int l, int r, int d) {
curD = d;
int mid = (l + r) >> 1;
nth_element(a + l, a + mid, a + r + 1);
for(int i = 0; i < D; i++)
co[mid][i] = mi[mid][i] = ma[mid][i] = a[mid].co[i];
if(mid > l) ls[mid] = build(l, mid - 1, (d + 1) % D), update(mid, ls[mid]);
if(mid < r) rs[mid] = build(mid + 1, r, (d + 1) % D), update(mid, rs[mid]);
return mid;
}
void insert(int k, int x, int d){
if(co[x][d] <= co[k][d]){
if(!ls[k]) ls[k] = x;
else insert(ls[k], x, (d + 1) % D);
update(k, ls[k]);
}
else{
if(!rs[k]) rs[k] = x;
else insert(rs[k], x, (d + 1) % D);
update(k, rs[k]);
}
}
int mindis(int k, const point &a) {
int ret = 0;
for(int i = 0; i < D; i++)
ret += max(mi[k][i] - a.co[i], 0) + max(a.co[i] - ma[k][i], 0);
return ret;
}
int getdis(int k, const point &a) {
int ret = 0;
for(int i = 0; i < D; i++)
ret += abs(co[k][i] - a.co[i]);
return ret;
}
void query(int k, const point &a) {
ans = min(ans, getdis(k, a));
int ld = INF, rd = INF;
if(ls[k]) ld = mindis(ls[k], a);
if(rs[k]) rd = mindis(rs[k], a);
if(ld <= rd){
if(ld <= ans) query(ls[k], a);
if(rd <= ans) query(rs[k], a);
}
else{
if(rd <= ans) query(rs[k], a);
if(ld <= ans) query(ls[k], a);
}
}
int main() {
read(n), read(m), tot = n;
for(int i = 1; i <= n; i++)
for(int j = 0; j < D; j++)
read(a[i].co[j]);
root = build(1, n, 0);
while(m--){
int op;
read(op), read(a[++tot].co[0]), read(a[tot].co[1]);
if(op == 1) {
for(int i = 0; i < D; i++)
co[tot][i] = mi[tot][i] = ma[tot][i] = a[tot].co[i];
insert(root, tot, 0);
}
else {
ans = INF;
query(root, a[tot]);
write(ans), enter;
}
}
return 0;
}
BZOJ 2648 / 2716 K-D Tree 模板题的更多相关文章
- BZOJ 2243 染色 | 树链剖分模板题进阶版
BZOJ 2243 染色 | 树链剖分模板题进阶版 这道题呢~就是个带区间修改的树链剖分~ 如何区间修改?跟树链剖分的区间询问一个道理,再加上线段树的区间修改就好了. 这道题要注意的是,无论是线段树上 ...
- POJ1442-查询第K大-Treap模板题
模板题,以后要学splay,大概看一下treap就好了. #include <cstdio> #include <algorithm> #include <cstring ...
- 【BZOJ 3282】Tree Link Cut Tree模板题
知道了为什么要换根(changeroot),access后为什么有时要splay,以及LCT的其他操作,算是比较全面的啦吧,,, 现在才知道这些,,,真心弱,,, #include<cstdio ...
- BZOJ 3224 普通平衡树(Treap模板题)
3224: Tyvj 1728 普通平衡树 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 14301 Solved: 6208 [Submit][ ...
- BZOJ 2648/2716(SJY把件-KD_Tree)[Template:KD_Tree]
2648: SJY把件 Time Limit: 20 Sec Memory Limit: 128 MB Submit: 1180 Solved: 391 [id=2648" style= ...
- BZOJ 1208 宠物收养所 | 平衡树模板题
BZOJ 1208 宠物收养所 我犯过的错误:删除一个节点后没有update新的根节点,导致size错了! #include <cstdio> #include <cmath> ...
- POJ 1741.Tree and 洛谷 P4178 Tree-树分治(点分治,容斥版) +二分 模板题-区间点对最短距离<=K的点对数量
POJ 1741. Tree Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 34141 Accepted: 11420 ...
- 【BZOJ 1507】【NOI 2003】&【Tyvj P2388】Editor 块状链表模板题
2016-06-18 当时关于块状链表的想法是错误的,之前维护的是一个动态的$\sqrt{n}$,所以常数巨大,今天才知道原因TwT,请不要参照这个程序为模板!!! 模板题水啊水~~~ 第一次写块状链 ...
- kd-tree注解 & bzoj 2648 & 2716 & 3053 解决问题的方法
[KD-TREE简介]于SYC1999大神"迷住"下一个.我开始接触这样的算法. 首先.这个概念大概能去百度百科.详细的实施.我在看RZZ的代码长大的. 我们能够想象在平面上有N个 ...
随机推荐
- 【MEF】构建一个WPF版的ERP系统
原文:[MEF]构建一个WPF版的ERP系统 引言 MEF是微软的一个扩展性框架,遵循某种约定将各个部件组合起来.而ERP系统的一大特点是模块化,它们两者的相性很好,用MEF构建一个ERP系统是相当合 ...
- 执行力:Just Do It
执行力,最最关键的一点就是,立即去做,不要想太多. 当有一件事需要去做的时候,你的大脑肯定是接受到了"某种信号",比如来了一个灵感.受到一点启发.做某件事突然来了兴趣.或者想去探讨 ...
- mfc 类三种继承方式下的访问
知识点 public private protected 三种继承方式 三种继承方式的区别 public 关键字意味着在其后声明的所有成员及对象都可以访问. private 关键字意味着除了该类型的创 ...
- Ubuntu16.04上用源代码安装ICE
ubuntu16.04上用源代码安装ICE
- [LOJ#6066]. 「2017 山东一轮集训 Day3」第二题[二分+括号序列+hash]
题意 题目链接 分析 首先二分,假设二分的答案为 \(mid\),然后考虑利用括号序列来表示树的形态. 点 \(u\) 的 \(k-\) 子树的括号序列表示实际上是刨去了 \(u\) 子树内若干个与 ...
- .Net Core 分布式微服务框架 - Jimu 添加 Swagger 支持
系列文章 .Net Core 分布式微服务框架介绍 - Jimu .Net Core 分布式微服务框架 - Jimu 添加 Swagger 支持 一.前言 最近有空就优化 Jimu (一个基于.Net ...
- linux AB web 性能测试工具
ab(选项)(参数) 选项 -A:指定连接服务器的基本的认证凭据: -c:指定一次向服务器发出请求数: -C:添加cookie: -g:将测试结果输出为“gnuolot”文件: -h:显示帮助信息: ...
- SVN回退版本
执行svn up 命令 保证当前本地版本是最新的版本. svn up 执行svn log 命令,查看历史修改,确定需要回复的版本,如果想要对比2个不同版本的文件差异 可以使用命令 svn diff - ...
- laravel从5.2到5.5从入门到精通视频教程共16套
laravel从5.2到5.5从入门到精通视频教程共16套,大部分都是实战项目比如P2P.博客.短网址.知乎门户.app软件开发.微信商城实战等 课程目录: 01.Laravel框架从入门到精通02. ...
- Daily Scrumming* 2015.12.12(Day 4)
一.团队scrum meeting照片 二.今日总结 姓名 WorkItem ID 工作内容 签入链接以及备注说明 江昊 任务1036 进行界面开发,明日准备开发第一个界面,社团展示界面 工作暂未完 ...