【BZOJ 2648】SJY摆棋子 & 【BZOJ 2716】【Violet 3】天使玩偶
KDTree模板,双倍经验啦啦啦~
#include<cstdio>
#include<cstring>
#include<algorithm>
#define read(x) x=getint()
using namespace std;
const int N = 500003;
const int inf = 0x7fffffff;
int getint() {
int k = 0, fh = 1; char c = getchar();
for(; c < '0' || c > '9'; c = getchar())
if (c == '-') fh = -1;
for(; c >= '0' && c <= '9'; c = getchar())
k = k * 10 + c - '0';
return k * fh;
}
bool D;
int n, t, root, ans;
struct KDT {
int d[2], ch[2], minn[2], maxn[2];
bool operator < (const KDT &a) const {return d[D] < a.d[D];}
void init() {for(int i = 0; i < 2; ++i) minn[i] = maxn[i] = d[i];}
} T[N << 1], QQ;
void pushup(int rt) {
for(int i = 0; i < 2; ++i)
if (T[rt].ch[i]) {
int x = T[rt].ch[i];
for(int j = 0; j < 2; ++j)
T[rt].minn[j] = min(T[rt].minn[j], T[x].minn[j]),
T[rt].maxn[j] = max(T[rt].maxn[j], T[x].maxn[j]);
}
}
int Build(int l = 1, int r = n, bool d = 0) {
D = d; int mid = (l + r) >> 1; nth_element(T + l, T + mid, T + r + 1);
T[mid].init();
if (l != mid) T[mid].ch[0] = Build(l, mid - 1, !d);
if (r != mid) T[mid].ch[1] = Build(mid + 1, r, !d);
pushup(mid);
return mid;
}
int ask(int rt, KDT p) {
int ret = 0;
for(int i = 0; i < 2; ++i)
ret += max(0, T[rt].minn[i] - p.d[i]), ret += max(0, p.d[i] - T[rt].maxn[i]);
return ret;
}
void insert(int rt = root, bool d = 0) {
bool flag = T[n].d[d] > T[rt].d[d];
if (T[rt].ch[flag]) insert(T[rt].ch[flag], !d);
else T[rt].ch[flag] = n;
pushup(rt);
}
int dis(KDT a, KDT b) {
return abs(a.d[0] - b.d[0]) + abs(a.d[1] - b.d[1]);
}
void Query(int rt = root, bool d = 0) {
int Dis = dis(T[rt], QQ), dl = inf, dr = inf;
ans = min(ans, Dis);
if (T[rt].ch[0]) dl = ask(T[rt].ch[0], QQ);
if (T[rt].ch[1]) dr = ask(T[rt].ch[1], QQ);
if (dl < dr) {
if (dl < ans) Query(T[rt].ch[0], !d);
if (dr < ans) Query(T[rt].ch[1], !d);
} else {
if (dr < ans) Query(T[rt].ch[1], !d);
if (dl < ans) Query(T[rt].ch[0], !d);
}
}
int main() {
read(n); read(t);
for(int i = 1; i <= n; ++i)
read(T[i].d[0]), read(T[i].d[1]);
int num;
for(root = Build(); t; --t) {
read(num); ans = inf;
if (num == 1) {
read(T[++n].d[0]); read(T[n].d[1]);
T[n].init();
insert();
} else {
read(QQ.d[0]); read(QQ.d[1]);
Query();
printf("%d\n", ans);
}
}
return 0;
}
现在学新东西感觉就是作死啊~
【BZOJ 2648】SJY摆棋子 & 【BZOJ 2716】【Violet 3】天使玩偶的更多相关文章
- bzoj 2648: SJY摆棋子&&2716: [Violet 3]天使玩偶 --kdtree
2648: SJY摆棋子&&2716: [Violet 3]天使玩偶 Time Limit: 20 Sec Memory Limit: 128 MB Description 这天,S ...
- BZOJ 2648: SJY摆棋子
2648: SJY摆棋子 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 2968 Solved: 1011[Submit][Status][Disc ...
- BZOJ 2648: SJY摆棋子 kdtree
2648: SJY摆棋子 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=2648 Description 这天,SJY显得无聊.在家自己玩 ...
- BZOJ 2648: SJY摆棋子(K-D Tree)
Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 6051 Solved: 2113[Submit][Status][Discuss] Descript ...
- bzoj 2648 SJY摆棋子 kd树
题目链接 初始的时候有一些棋子, 然后给两种操作, 一种是往上面放棋子. 另一种是给出一个棋子的位置, 问你离它最近的棋子的曼哈顿距离是多少. 写了指针版本的kd树, 感觉这个版本很好理解. #inc ...
- BZOJ 2648 SJY摆棋子(KD Tree)
http://www.lydsy.com/JudgeOnline/problem.php?id=2648 题意: 思路: KDtree模板题. 参考自http://www.cnblogs.com/ra ...
- BZOJ 2648 SJY摆棋子(KD树)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2716 [题目大意] 给出一些点,同时不断插入点和询问某点离插入点最近距离 [题解] 我 ...
- bzoj 2648 SJY摆棋子——KDtree
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2648 第一道KDtree! 学习资料:https://blog.csdn.net/zhl30 ...
- bzoj 2648 SJY摆棋子 —— K-D树
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2648 学习资料:https://blog.csdn.net/zhl30041839/arti ...
- BZOJ 2648 SJY摆棋子 ——KD-Tree
[题目分析] KD-Tree第一题,其实大概就是搜索剪枝的思想,在随机数据下可以表现的非常好NlogN,但是特殊数据下会达到N^2. 精髓就在于估价函数get以及按照不同维度顺序划分的思想. [代码] ...
随机推荐
- Codeforces 687B. Remainders Game[剩余]
B. Remainders Game time limit per test 1 second memory limit per test 256 megabytes input standard i ...
- NOIP2011pj表达式的值[树形DP 笛卡尔树 | 栈 表达式解析]
题目描述 对于1 位二进制变量定义两种运算: 运算的优先级是: 先计算括号内的,再计算括号外的. “× ”运算优先于“⊕”运算,即计算表达式时,先计算× 运算,再计算⊕运算.例如:计算表达式A⊕B × ...
- KSFramework常见问题:Lua脚本热重载,内存状态数据丢失?
Lua热重载 内存数据在重载后会丢失 KSFramework中,所有的UI Lua脚本是可以重载的.脚本中的一些内存数据,在重载后会丢失,比如: -- 记录一个UI界面被打开了多少次 function ...
- PHP的文件操作常用函数
PHP文件操作 1 获得文件名:basename - 返回路径中的文件名部分 给出一个包含有指向一个文件的全路径的字符串,本函数返回基本的文件名.如果文件名是以 suffix 结束的,那这一部分也会被 ...
- [No000061]"别人"凭什么要帮你?&理解中国人的人际和谐&外人、自己人与另一半
你出身平凡家庭:你毕业于普通大学:你没有田晓霞这样的妻子或者普京这样的丈夫:在权力.金钱乃至能力积累上,你才刚刚上路.你很年轻,你渴望成功,那么,"别人"凭什么帮你? " ...
- 转: Eclipse自动提示功能
Eclipse的一个重要功能 2011-07-29 10:20:37 标签:java eclipse editor 休闲 职场 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信 ...
- sg函数与博弈论
这个标题是不是看起来很厉害呢... 我们首先来看一个最简单的游戏.比如我现在有一堆石子,有p个,每次可以取走若干个(不能不取),不能取的人就输了. 现在假设有两个人要玩这个游戏,一个人先手,一个人后手 ...
- POJ 3259 Wormholes (判负环)
Wormholes Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 46123 Accepted: 17033 Descripti ...
- 洛谷 1016 / codevs 1046 旅行家的预算
https://www.luogu.org/problem/show?pid=1016 http://codevs.cn/problem/1046/ 题目描述 Description 一个旅行家想驾驶 ...
- jboss:跟踪所有sql语句及sql参数
默认情况下,hibernate/JPA 在server.log中记录的SQL语句,参数都是用?代替的,这样不太方便. 网上留传的p6spy在最新的jboss上(EAP 6.0+版本)貌似已经不起作用了 ...