2648: SJY摆棋子&&2716: [Violet 3]天使玩偶

Time Limit: 20 Sec  Memory Limit: 128 MB

Description

这天,SJY显得无聊。在家自己玩。在一个棋盘上,有N个黑色棋子。他每次要么放到棋盘上一个黑色棋子,要么放上一个白色棋子,如果是白色棋子,他会找出距离这个白色棋子最近的黑色棋子。此处的距离是 曼哈顿距离 即(|x1-x2|+|y1-y2|) 。现在给出N<=500000个初始棋子。和M<=500000个操作。对于每个白色棋子,输出距离这个白色棋子最近的黑色棋子的距离。同一个格子可能有多个棋子。

Input

第一行两个数 N M
以后M行,每行3个数 t x y
如果t=1 那么放下一个黑色棋子
如果t=2 那么放下一个白色棋子

Output

对于每个T=2 输出一个最小距离

Sample Input

2 3
1 1
2 3
2 1 2
1 3 3
2 4 2

Sample Output


1
2

HINT

kdtree可以过

Source

照着zgz233打了一遍板子qaq

#include<map>
#include<cmath>
#include<queue>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define inf 1000000007
#define ll long long
#define N 1000010
inline int rd()
{int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*f;
}
struct qaz
{int d[2],mn[2],mx[2],l,r;int& operator[](int x){return d[x];}
}p[N],tr[N],T;
int D;
bool operator <(qaz a,qaz b){return a[D]<b[D];}
int rt;
#define ls tr[x].l
#define rs tr[x].r
inline void upd(int x)
{for(int i=0;i<2;i++){if(ls) tr[x].mn[i]=min(tr[x].mn[i],tr[ls].mn[i]),tr[x].mx[i]=max(tr[x].mx[i],tr[ls].mx[i]);if(rs) tr[x].mn[i]=min(tr[x].mn[i],tr[rs].mn[i]),tr[x].mx[i]=max(tr[x].mx[i],tr[rs].mx[i]);}
}
int build(int l,int r,int t)
{D=t;int mid=l+r>>1;nth_element(p+l,p+mid,p+r+1);tr[mid]=p[mid];for(int i=0;i<2;i++) tr[mid].mn[i]=tr[mid].mx[i]=tr[mid][i];if(l<mid) tr[mid].l=build(l,mid-1,t^1);if(mid<r) tr[mid].r=build(mid+1,r,t^1);upd(mid);return mid;
}
int n,m;
void ins(int x,int t)
{if(T[t]<tr[x][t]){if(ls) ins(ls,t^1);else{ls=++n,tr[n]=T;}}else {if(rs) ins(rs,t^1);else{rs=++n,tr[n]=T;}}upd(x);
}
int ans;
int dis(qaz a,qaz b){return abs(a[0]-b[0])+abs(a[1]-b[1]);}
int gtdis(qaz a,qaz b)
{int ji=0;for(int i=0;i<2;i++)ji+=max(0,b.mn[i]-a[i])+max(0,a[i]-b.mx[i]);return ji;
}
void fd(int x,int t)
{int d=dis(tr[x],T),dl=inf,dr=inf;ans=min(d,ans);if(ls) dl=gtdis(T,tr[ls]);if(rs) dr=gtdis(T,tr[rs]);if(dl<dr){if(dl<ans) fd(ls,t^1);if(dr<ans) fd(rs,t^1);}else {if(dr<ans) fd(rs,t^1);if(dl<ans) fd(ls,t^1);}
}
int main()
{n=rd();m=rd();for(int i=1;i<=n;i++) p[i][0]=rd(),p[i][1]=rd();rt=build(1,n,0);int op,x,y;while(m--){T.l=T.r=0;op=rd();T.mn[0]=T.mx[0]=T[0]=rd();T.mn[1]=T.mx[1]=T[1]=rd();if(op==1) ins(rt,0);else {ans=inf;fd(rt,0);printf("%d\n",ans);}}return 0;
}

转载于:https://www.cnblogs.com/lkhll/p/8005243.html

bzoj 2648: SJY摆棋子2716: [Violet 3]天使玩偶 --kdtree相关推荐

  1. BZOJ2648: SJY摆棋子2716: [Violet 3]天使玩偶

    BZOJ2648: SJY摆棋子 BZOJ2716: [Violet 3]天使玩偶 BZOJ氪金无极限... 其实这两道是同一题. 附上2648的题面: Description 这天,SJY显得无聊. ...

  2. BZOJ 2648 SJY摆棋子(KD-Tree)

    题目链接:BZOJ 2648  SJY摆棋子 题意: 在一个棋盘上,有N个黑色棋子.他每次要么放到棋盘上一个黑色棋子,要么放上一个白色棋子,如果是白色棋子,他会找出距离这个白色棋子最近的黑色棋子.此处 ...

  3. bzoj 2648 SJY摆棋子 cdq分治+树状数组

    题面 题目传送门 解法 同bzoj2716 自己cdq写的还是丑啊,别人A掉了我T飞了 代码 #include <bits/stdc++.h> #define inf 1 << ...

  4. BZOJ 2716: [Violet 3]天使玩偶

    2716: [Violet 3]天使玩偶 Time Limit: 80 Sec  Memory Limit: 128 MB Submit: 1473  Solved: 621 [Submit][Sta ...

  5. BZOJ 2716 Violet 3 天使玩偶

    2716: [Violet 3]天使玩偶 Time Limit: 80 Sec  Memory Limit: 128 MB Submit: 2145  Solved: 928 [Submit][Sta ...

  6. 2716: [Violet 3]天使玩偶/2648: SJY摆棋子

    题目链接 题目大意:平面动态加点,求与给出的点曼哈顿距离最近点 题解:KD树模板题 我的收获:23333 #include <cstdio> #include <iostream&g ...

  7. BZOJ 2716 [Violet 3]天使玩偶 (CDQ分治、树状数组)

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=2716 怎么KD树跑得都那么快啊..我写的CDQ分治被暴虐 做四遍CDQ分治,每次求一个 ...

  8. BZOJ 2716: [Violet 3]天使玩偶 | CDQ分治

    题目: 南开OJ有非权限提交处 http://oi.nks.edu.cn/zh/Problem/Details/2739 题解: 鹅鹅鹅....有三维(t,x,y),所以可以用CDQ解决的好题 初始点 ...

  9. 2716 [Violet 3] 天使玩偶

    @(BZOJ)[CDQ分治] Sample Input 100 10081 2327 1652 5844 2425 9534 296 258 1497 5097 1864 347 2255 2889 ...

最新文章

  1. D - Sand Fortress CodeForces - 985D
  2. mysql 原理 ~ 索引通说
  3. ARC068C - Snuke Line
  4. 基于 Raphael 的 Web UI 设计 - 初稿
  5. android源码分析(一) - 语言切换机制
  6. 火线精英显示服务器一断,火线精英bug大全解析
  7. 在计算机上OF键开机键,电脑开机时出现英文字母串需要按回车键才能继
  8. java调用高德地图api_JAVA调用高德地图API实践
  9. 电子邮箱免费注册,个人邮箱申请哪个好?微信邮箱客户端这个好用
  10. WP模板常用调用函数
  11. 四 状语从句(2021-11-09)
  12. 2020-05-09
  13. 解决:getReader() has already been called for this request
  14. 25岁之前,男生一定要知道的30条人生忠告!!!
  15. python数据分析与可视化清华大学_【官方正版】 Python数据分析与可视化 微课视频版 清华大学出版社 魏伟一 李晓红 软件工具 程序设计...
  16. 内网渗透神器(Mimikatz)——使用教程
  17. VirtualBox安装增强功能时报错:未能加载虚拟光盘 到虚拟电脑
  18. 微软等数据结构+算法面试100题全部答案集锦 复制过来比较乱
  19. 夸克缓存视频合并小工具
  20. PHP的create方法,Thinkphp中Create方法深入探究

热门文章

  1. A.457 - Linear Cellular Automata
  2. 问题 F: 编写函数:一维数组的逆序 (Append Code)
  3. pythonmatplotlib怎么设置曲线_python – Matplotlib的“symlog”选项:如何防止曲线“回来”?...
  4. python数据分析基础 阮敬_Python数据分析用到的几个重要的库
  5. c语言求一个数的阶乘值代码,求10000的阶乘(c语言代码实现)
  6. 轴固定位置_何为轴?来看看你对轴了解了么
  7. python导入自己写的py_卧槽,神操作!一句查询让Python帮忙自己写程序
  8. 5 | Spatial-based GNN/convolution模型之DGC
  9. Matcha已升级至0xV4版,比Uniswap和Sushi等平台节省4%的交易费
  10. Zilliqa联合创始人:ZIP-12提案已成功部署,为未来的治理投票奠定基础