bzoj2648SJY摆棋子&&bzoj2716[Violet 3]天使玩偶*
题意:
棋盘上有n个棋子,现在有m个操作,一种是加棋子,一种是查询离某个点最近的棋子。n,m≤500000。
题解:
先将已有的棋子建kd树,然后加棋子就直接向kd树插入节点。因为本题数据弱,所以直接插节点不会T,如果是一些数据比较强的题目,需要在插入一定量节点后重构整棵树。
代码:
#include <cstdio>
#include <cstring>
#include <algorithm>
#define inc(i,j,k) for(int i=j;i<=k;i++)
#define maxn 500010
#define INF 0x3fffffff
using namespace std; inline int read(){
char ch=getchar(); int f=,x=;
while(ch<''||ch>''){if(ch=='-')f=-; ch=getchar();}
while(ch>=''&&ch<='')x=x*+ch-'',ch=getchar();
return f*x;
}
int n,m,f,rt,ans;
struct p{int pos[]; bool operator < (const p &a)const{return pos[f]<a.pos[f];}}ps[maxn];
struct nd{p pos; int mx[],mn[],lc,rc;}nds[maxn*];
int dis(p a,p b){return abs(a.pos[]-b.pos[])+abs(a.pos[]-b.pos[]);}
void update(int x){
inc(i,,){
if(nds[x].lc)
nds[x].mx[i]=max(nds[x].mx[i],nds[nds[x].lc].mx[i]),
nds[x].mn[i]=min(nds[x].mn[i],nds[nds[x].lc].mn[i]);
if(nds[x].rc)
nds[x].mx[i]=max(nds[x].mx[i],nds[nds[x].rc].mx[i]),
nds[x].mn[i]=min(nds[x].mn[i],nds[nds[x].rc].mn[i]);
}
}
int build(int l,int r,int now){
f=now; int mid=(l+r)>>; nth_element(ps+l,ps+mid,ps+r+);
inc(i,,)nds[mid].mx[i]=nds[mid].mn[i]=ps[mid].pos[i]; nds[mid].pos=ps[mid];
if(l<mid)nds[mid].lc=build(l,mid-,now^); if(mid<r)nds[mid].rc=build(mid+,r,now^);
update(mid); return mid;
}
void insert(int &x,p a,int now){
if(!x){x=++n; inc(i,,)nds[x].mx[i]=nds[x].mn[i]=a.pos[i]; nds[x].pos=a; return;}
f=now; if(a<nds[x].pos)insert(nds[x].lc,a,now^);else insert(nds[x].rc,a,now^); update(x);
}
int get(int x,p a){
int q=; inc(i,,)q+=max(a.pos[i]-nds[x].mx[i],),q+=max(nds[x].mn[i]-a.pos[i],); return q;
}
void query(int x,p a){
ans=min(ans,dis(a,nds[x].pos)); int dl=INF-,dr=INF-;
if(nds[x].lc)dl=get(nds[x].lc,a); if(nds[x].rc)dr=get(nds[x].rc,a);
if(dl<dr){
if(ans>dl)query(nds[x].lc,a); if(ans>dr)query(nds[x].rc,a);
}else{
if(ans>dr)query(nds[x].rc,a); if(ans>dl)query(nds[x].lc,a);
}
}
int main(){
n=read(); m=read(); inc(i,,n)ps[i].pos[]=read(),ps[i].pos[]=read(); rt=build(,n,);
inc(i,,m){
int t=read(),x=read(),y=read();
if(t==)insert(rt,(p){x,y},);else ans=INF,query(rt,(p){x,y}),printf("%d\n",ans);
}
return ;
}
20160906
bzoj2648SJY摆棋子&&bzoj2716[Violet 3]天使玩偶*的更多相关文章
- BZOJ2648: SJY摆棋子&&2716: [Violet 3]天使玩偶
BZOJ2648: SJY摆棋子 BZOJ2716: [Violet 3]天使玩偶 BZOJ氪金无极限... 其实这两道是同一题. 附上2648的题面: Description 这天,SJY显得无聊. ...
- 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摆棋子 & 2716: [Violet 3]天使玩偶(kdtree)
http://www.lydsy.com/JudgeOnline/problem.php?id=2716 http://www.lydsy.com/JudgeOnline/problem.php?id ...
- [BZOJ2716] [Violet 3]天使玩偶(CDQ分治)
[BZOJ2716] [Violet 3]天使玩偶(CDQ分治) 题面 Ayu 在七年前曾经收到过一个天使玩偶,当时她把它当作时间囊埋在了地下.而七年后 的今天,Ayu 却忘了她把天使玩偶埋在了哪里, ...
- 【kd-tree】bzoj2716 [Violet 3]天使玩偶
#include<cstdio> #include<cmath> #include<algorithm> using namespace std; #define ...
- bzoj2716: [Violet 3]天使玩偶
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #i ...
- BZOJ2716 [Violet 3]天使玩偶 【CDQ分治】
题目 输入格式 输出格式 输入样例 //样例太长就不贴了.... 输出样例 //见原题 提示 题解 我们将曼哈顿距离式子中的绝对值去掉,每次只考虑x,y比当前点小的更新答案. 为了使所有点都对答案进行 ...
- BZOJ2716: [Violet 3]天使玩偶(KD-Tree)
Description Input Output Sample Input 100 100 81 23 27 16 52 58 44 24 25 95 34 2 96 25 8 14 97 50 97 ...
- SJY摆棋子&&[Violet 3]天使玩偶
SJY摆棋子 https://www.lydsy.com/JudgeOnline/problem.php?id=2648 [Violet 3]天使玩偶 https://www.lydsy.com/Ju ...
随机推荐
- (七)四种常见的post请求中的参数形式
原文链接:https://blog.csdn.net/jiadajing267/article/details/87883725 1).HTTP 协议是以 ASCII 码 传输,建立在 TCP/IP ...
- Java中Clob类型转换成String类型的问题
1.问题: 项目中使用druid+达梦数据库(基本类似Oracle),查出的Clob类型数据在运行时为ClobProxyImpl对象而不是内容,不能转为字符串 2.原代码: map为达梦数据库或Ora ...
- 一个线上问题的思考:Eureka注册中心集群如何实现客户端请求负载及故障转移?
前言 先抛一个问题给我聪明的读者,如果你们使用微服务SpringCloud-Netflix进行业务开发,那么线上注册中心肯定也是用了集群部署,问题来了: 你了解Eureka注册中心集群如何实现客户端请 ...
- easymock案例2
public interface IStudent { public String doMethod1(); public String doMethod2(); public String doMe ...
- ThinkPHP5使用PHPExcel实现数据导出功能
1.将PHPExcel类库文件夹放入extend目录下 2.导出功能实现 public function download(){ if(request()->isPost()){ $val = ...
- 呼~~~~--历时几个星期终于搞好了HTTPS协议---阿里云
打开网站加入阿里云官网 https://yundun.console.aliyun.com/?p=cas#/overview/cn-hangzhou 登陆查看自己的证书 没有点击购买证书 -- 选中对 ...
- 入门大数据---Spark_Streaming与流处理
一.流处理 1.1 静态数据处理 在流处理之前,数据通常存储在数据库,文件系统或其他形式的存储系统中.应用程序根据需要查询数据或计算数据.这就是传统的静态数据处理架构.Hadoop 采用 HDFS 进 ...
- 小师妹学JVM之:JIT中的PrintAssembly
目录 简介 使用PrintAssembly 输出过滤 总结 简介 想不想了解JVM最最底层的运行机制?想不想从本质上理解java代码的执行过程?想不想对你的代码进行进一步的优化和性能提升? 如果你的回 ...
- EFCore-一对一配置外键小记2
前后两次遇到这样的错误: The property 'xx' on entity type 'xxxx' has a temporary value. Either set a permanent v ...
- 关于线上一次DDOS攻击和阿里云DDOS防护相关内容
问题 最近我们的一台阿里云服务器 (ECS,有公网IP,Nginx 服务器,开放了80,443),遭受到了DDOS攻击,主要攻击的行为是 攻击我们443 端口.发起大量的请求. 但是我们在 Nginx ...