[bzoj2648]SJY摆棋子(带插入kd-tree)】的更多相关文章

解题关键:带插入kdtree模板题. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define N 1000005 #define inf (1<<30) using namespace std; int n,m,dim,rt,ans; ],x[],y[];}a[N]; bool cmp(node x,node y){ return x.p[…
2648: SJY摆棋子 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 2459  Solved: 834[Submit][Status][Discuss] Description 这天,SJY显得无聊.在家自己玩.在一个棋盘上,有N个黑色棋子.他每次要么放到棋盘上一个黑色棋子,要么放上一个白色棋子,如果是白色棋子,他会找出距离这个白色棋子最近的黑色棋子.此处的距离是 曼哈顿距离 即(|x1-x2|+|y1-y2|) .现在给出N<=500000…
BZOJ2648: SJY摆棋子 BZOJ2716: [Violet 3]天使玩偶 BZOJ氪金无极限... 其实这两道是同一题. 附上2648的题面: Description 这天,SJY显得无聊.在家自己玩. 在一个棋盘上,有N个黑色棋子. 他每次要么放到棋盘上一个黑色棋子,要么放上一个白色棋子,如果是白色棋子,他会找出距离这个白色棋子最近的黑色棋子. 此处的距离是 曼哈顿距离 即(|x1-x2|+|y1-y2|) . 现在给出N<=500000个初始棋子.和M<=500000个操作. 对…
2648: SJY摆棋子 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 5421  Solved: 1910[Submit][Status][Discuss] Description 这天,SJY显得无聊.在家自己玩.在一个棋盘上,有N个黑色棋子.他每次要么放到棋盘上一个黑色棋子,要么放上一个白色棋子,如果是白色棋子,他会找出距离这个白色棋子最近的黑色棋子.此处的距离是 曼哈顿距离 即(|x1-x2|+|y1-y2|) .现在给出N<=50000…
k-d tree + 重构的思想,就能卡过luogu和bzoj啦orz #include <algorithm> #include <iostream> #include <cstdio> using namespace std; int n, m, rot, nowD, opt, uu, vv, ans, rub[1000005], din, cur; const double aph=0.65; struct Point{ int d[2], mn[2], mx[2…
Time Limit: 20 Sec  Memory Limit: 128 MB Submit: 3128  Solved: 1067 Description 这天,SJY显得无聊.在家自己玩.在一个棋盘上,有N个黑色棋子.他每次要么放到棋盘上一个黑色棋子,要么放上一个白色棋子,如果是白色棋子,他会找出距离这个白色棋子最近的黑色棋子.此处的距离是 曼哈顿距离 即(|x1-x2|+|y1-y2|) .现在给出N<=500000个初始棋子.和M<=500000个操作.对于每个白色棋子,输出距离这个…
传送门 kd−treekd-treekd−tree模板题. 题意简述:支持在平面上插入一个点,求对于一个点的最近点对. 思路:cdqcdqcdq是一种很不错的分治方法 只是好像码量有点窒息 所以我用了kd−treekd-treekd−tree来做. 其实就是两个维度分别作为键值来建立二叉搜索树即可. 这道题在查询时可以通过判断下一层的有没有可能对答案有贡献来剪个枝. 由于蒟蒻暂时没写过方差划分因此时间很慢. 代码: #include<bits/stdc++.h> #define mid (l+…
板子题. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm> using namespace std; #define ll long long #define N 1000010 #define inf 2000000000 ')) c=getchar();return…
#include<cstdio> #include<cmath> #include<algorithm> using namespace std; #define N 500001 #define INF 2147483647 #define KD 2//ά¶ÈÊý int qp[KD],disn; int n,root; bool dn; struct Node { int minn[KD],maxx[KD],p[KD]; int ch[2]; void Init(…
题面 传送门 KDTree 大概就是一个分割\(k\)维空间的数据结构,二叉树 建立:每层选取一维为关键字,把中间的点拿出来,递归左右,有个\(STL\)函数nth_element可以用一下 维护:维护当前这个点的子树的每一维的最大值和最小值,相当于维护了个高维矩形 查询:直接遍历一棵树是\(O(n)\)的,利用一些独特的性质可以剪枝,因题而异 奇技淫巧: 把坐标绕原点转\(\alpha\)度 定期重构或者像替罪羊树一样,利用平衡因子判断是否需重构 每次查询到某一层优先选取答案可能最优的一个儿子…