【HDU4456】Crowd(曼哈顿距离转切比雪夫距离+二维坐标hash离散化+二维树状数组)

题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=4456

题目:


N*N的网格,M个询问

p=2时输出到(x,y)的曼哈顿距离小于等于z的点对应的值之和

 

解题思路:


(1)到A(x,y)的曼哈顿距离小于等于z的点分布在以A为中心,中垂线的一半=z的菱形上(菱形的四个边都相同),把曼哈顿忽略转化为切比雪夫距离,到A(x,y)的曼哈顿距离小于等于z的点分布在以A'(A'为转为后的坐标)为中心,边长2*z的正方形内:(x,y) --->(x+y, x-y+N),且转换后的网格相当于原来的4倍左右,但其实需要离散的点并没有那么多,网上的题解都是取了400万

(2)找到这个正方形的左上角和右下角并计算这个区间内的点的值的和(二维树状数组解决),相当于二维树状数组的单点更新和区间查询,注意不要越界

(3)N最大为100000,点太多了,需要离散化,并且只离散化有用的点,先对M个询问给出的所有的点进行离散化,并且按照二维树状数组的方式进行离散化,因为只有用二维树状数组更新和求sum值的那些点才有用,才需要离散化

12年杭州区域赛的金牌题好像是,@(・●・)@溜了溜了<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值