P4169 [Violet]天使玩偶
两种操作:1.加入点(x,y); 2.查询距(x,y)最近的点的曼哈顿距离距离
思路:绝对值拆开通常可以取max,不过这里直接分类讨论4种情况,我们发现如果找\(i\)点左下点\(j\)\((x_j<=x_i且y_j<=y_i)\)到\(i\)的最小距离:\(x_i-x_j+y_i-y_j=(x_i+y_i)-(x_j+y_j)\)
所以使距离最小即让\(x_j+y_j\)尽量大,我们发现这是个三维偏序问题:CDQ分治+树状数组
以上都是我能想到的,下面就是我菜鸡借鉴的:
其它三种情况怎么办?
题解告诉我们,同理!
其实有技巧的:我们找到x,y的范围上限(len),我们利用len-x,len-y这两种变换即可变幻出四种情况,无论i,j两个点开始在那个方向,都可以变化出j在i的所有方位(当然就包含了左下的情况)。
因此四次cdq即可。注意:
1.树状数组下标不能存0,要把整体坐标+1
2.C要初始化为-inf而不是0因为在一个(x,y)左下角没有数的时候不应该更新答案
这个cdq的板子还是很优秀的,我没有卡任何常数直接过了
- 代码:
 
#include<bits/stdc++.h>
using namespace std;
const int N=1e7+5;
int inf=0x3f3f3f3f,C[N],n,m,tot=0,ans[N],len;
int lowbit(int u) {return u&(-u);}
void Update(int p,int d) {
	for(int i=p;i<=len;i+=lowbit(i)) C[i]=max(C[i],d);
}
int Ask(int p) {
	int mx=-inf;
	for(int i=p;i;i-=lowbit(i)) mx=max(mx,C[i]);
	return mx;
}
void Clear(int p) {
	for(int i=p;i<=len;i+=lowbit(i)) C[i]=-inf;
}
struct node {
	int opt,x,y,id;
}Q[N],a[N],t[N];
void CDQ(int l,int r) {
	if(l==r) return;
	int mid=(l+r)>>1;
	CDQ(l,mid),CDQ(mid+1,r);
	int i=l,j=mid+1,c=l;
	while(c<=r) {
		if((j>r)||(i<=mid&&Q[i].x<=Q[j].x)) {
			if(Q[i].opt==1) Update(Q[i].y,Q[i].x+Q[i].y);
			t[c++]=Q[i++];
		}
		else {
			if(Q[j].opt==2) ans[Q[j].id]=min(ans[Q[j].id],Q[j].x+Q[j].y-Ask(Q[j].y));
			t[c++]=Q[j++];
		}
	}
	for(int k=l;k<=mid;k++) if(Q[k].opt==1) Clear(Q[k].y);
	for(int k=l;k<=r;k++) Q[k]=t[k];
}
void _cdq(int fx,int fy) {
	for(int i=1;i<=tot;i++) {
		Q[i]=a[i];
		if(fx) Q[i].x=len-Q[i].x;
		if(fy) Q[i].y=len-Q[i].y;
	}
	CDQ(1,tot);
}
int main() {
	memset(ans,0x3f,sizeof(ans));
	memset(C,-0x3f,sizeof(C));
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++) {
		++tot;
		scanf("%d%d",&a[tot].x,&a[tot].y); a[tot].opt=1,a[tot].id=tot;
		a[tot].x++,a[tot].y++;
		len=max(len,max(a[tot].x,a[tot].y));
	}
	for(int i=1;i<=m;i++) {
		tot++;
		scanf("%d%d%d",&a[tot].opt,&a[tot].x,&a[tot].y);
		a[tot].id=tot;
		a[tot].x++,a[tot].y++;
		len=max(len,max(a[tot].x,a[tot].y));
	}
	len++;
	_cdq(0,0),_cdq(0,1),_cdq(1,0),_cdq(1,1);
	for(int i=1;i<=tot;i++) {
		if(a[i].opt==2) {
			printf("%d\n",ans[i]);
		}
	}
	return 0;
}
												
											P4169 [Violet]天使玩偶的更多相关文章
- bzoj2716/2648 / P4169 [Violet]天使玩偶/SJY摆棋子
		
P4169 [Violet]天使玩偶/SJY摆棋子 k-d tree 模板 找了好几天才发现输出优化错了....真是zz...... 当子树非常不平衡时,就用替罪羊树的思想,拍扁重建. luogu有个 ...
 - 洛谷 P4169 [Violet]天使玩偶/SJY摆棋子 解题报告
		
P4169 [Violet]天使玩偶/SJY摆棋子 题目描述 \(Ayu\)在七年前曾经收到过一个天使玩偶,当时她把它当作时间囊埋在了地下.而七年后 的今天,\(Ayu\) 却忘了她把天使玩偶埋在了哪 ...
 - 洛谷P4169 [Violet]天使玩偶/SJY摆棋子(CDQ分治)
		
[Violet]天使玩偶/SJY摆棋子 题目传送门 解题思路 用CDQ分治开了氧气跑过. 将输入给的顺序作为第一维的时间,x为第二维,y为第三维.对于距离一个询问(ax,ay),将询问分为四块,左上, ...
 - P4169 [Violet]天使玩偶/SJY摆棋子
		
题目背景 感谢@浮尘ii 提供的一组hack数据 题目描述 Ayu 在七年前曾经收到过一个天使玩偶,当时她把它当作时间囊埋在了地下.而七年后 的今天,Ayu 却忘了她把天使玩偶埋在了哪里,所以她决定仅 ...
 - Luogu P4169 [Violet]天使玩偶/SJY摆棋子
		
传送门 二维平面修改+查询,cdq分治可以解决. 求关于某个点曼哈顿距离(x,y坐标)最近的点——dis(A,B) = |Ax-Bx|+|Ay-By| 但是如何去掉绝对值呢? 查看题解发现假设所有的点 ...
 - 洛谷P4169 [Violet]天使玩偶/SJY摆棋子
		
%%%神仙\(SJY\) 题目大意: 一个二维平面,有两种操作: \(1.\)增加一个点\((x,y)\) \(2.\)询问距离\((x,y)\)曼哈顿最近的一个点有多远 \(n,m\le 300 0 ...
 - luoguP4169 [Violet]天使玩偶/SJY摆棋子 K-Dtree
		
P4169 [Violet]天使玩偶/SJY摆棋子 链接 luogu 思路 luogu以前用CDQ一直过不去. bzoj还是卡时过去的. 今天终于用k-dtree给过了. 代码 #include &l ...
 - [Violet]天使玩偶/SJY摆棋子 [cdq分治]
		
P4169 [Violet]天使玩偶/SJY摆棋子 求离 \((x,y)\) 最近点的距离 距离的定义是 \(|x1-x2|+|y1-y2|\) 直接cdq 4次 考虑左上右上左下右下就可以了-略微卡 ...
 - 【LG4169】[Violet]天使玩偶/SJY摆棋子
		
[LG4169][Violet]天使玩偶/SJY摆棋子 题面 洛谷 题解 至于\(cdq\)分治的解法,以前写过 \(kdTree\)的解法好像还\(sb\)一些 就是记一下子树的横.纵坐标最值然后求 ...
 
随机推荐
- H5移动端开发
			
开发前准备 环境: Node.js LTS版本 git 最新版 文档: 本项目技术栈基于 ES2016 VueJS vux 快速开始 1.克隆项目 git clone https://gitee.co ...
 - 利用angular4和nodejs-express构建一个简单的网站(七)—用户注册之ReactiveForm
			
这一节对用户注册组件进行分析.用户注册组件主要涉及angular4表单的操作.Angular提供了两种构建表单的技术:响应式表单和模板驱动表单. 这两项技术都属于@angular/forms库,并且共 ...
 - vue简单的父子组件之间传值
			
todo-list为例子: 代码: 父传子--------------属性 v-bind 子传父--------------$emit <!DOCTYPE html> <html ...
 - FastAPI(六十六)实战开发《在线课程学习系统》接口开发--用户注册接口开发
			
在前面我们分析了接口的设计,那么我们现在做接口的开发. 我们先去设计下pydantic用户参数的校验 from pydantic import BaseModel from typing import ...
 - 走进JUC的世界
			
概念 同步锁:synchronized.Lock区别 1.synchronized是不需要进行手动解锁 2.synchronized可以锁方法.锁同步代码块 3.synchronized是Java自带 ...
 - npm使用淘宝镜像源
			
npm使用淘宝镜像源 单次使用 npm install koa --registry=https://registry.npm.taobao.org 永久使用 配置淘宝镜像源 npm config s ...
 - Leetcode78/90/491之回溯中的子集问题
			
回溯之子集问题 子集问题和组合问题特别像 Leetcode78-子集 给你一个整数数组 nums ,数组中的元素 互不相同 .返回该数组所有可能的子集(幂集) 解集 不能 包含重复的子集.你可以按 任 ...
 - ajax - xhr level2新特性 json等众多内容
			
1. 今天的内容其实挺多的,我们慢慢来说.首先第一个是xhr的基本使用,什么是xhr? XMLHTTPRequest是浏览器提供的js对象,可以请求服务器上的数据资源,包括我们前面一直用的jq里面的三 ...
 - 图片杂乱无章、分享麻烦?HMS Core图片分类服务教你快速筛选、分类、整合相册
			
如今手机摄影越来越方便,随手一拍就能记录美好生活.但照片越多,整理越麻烦,有的时候我们想对照片进行二次加工.分享,需要不停翻找相册.HMS Core机器学习服务(ML Kit)提供了图片分类服务,方便 ...
 - flex 布局  自己做的demo
			
.row {/*横*/ display: -webkit-box;// display: -webkit-flex; /* Safari */ display: -moz-box; display: ...