HDU - 4456 Crowd
题目见:
[http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=34034]
一道显然的二维树状数组,还是单点修改,矩阵查询。
重点是把曼哈顿距离包含的一个立着的正方形旋转45度,变成水平的。
虽然同时mat由水平变成了立着的,但计算时并不会受影响,因为超出的地方不会被修改。
有两个地方要注意:
(1).坐标的转换
(2).下标离散化
代码:
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
#define MAXM 80000
#define MAXN 5000000
int n,m,p[MAXN+10],x[MAXN+10],y[MAXN+10],z[MAXN+10];
int h[MAXN+10],cnt,c[MAXN+10],w;
int lowbit(int x)
{return x&(-x);
}
void Get_ready(int xx,int yy)
{for(int i=xx; i<=w; i+=lowbit(i))for(int j=yy; j<=w; j+=lowbit(j))h[cnt++]=i*w+j;
}
void GetPoint(int xx,int yy,int &newx,int &newy)
{newx=xx-yy+n; //不要负数和0newy=xx+yy;
}
void update(int xx,int yy,int d)
{for(int i=xx; i<=w; i+=lowbit(i))for(int j=yy; j<=w; j+=lowbit(j)){int pos=lower_bound(h ,h+cnt ,i*w+j)-h;c[pos]+=d;}
}
int Getsum(int xx,int yy)
{int ret=0;for(int i=xx; i>0; i-=lowbit(i))for(int j=yy; j>0; j-=lowbit(j)){int pos=lower_bound(h ,h+cnt ,i*w+j) - h;if(h[pos] == i*w+j) //没有对应的hash值说明这个位置上的c值为0,忽略ret+=c[pos];}return ret;
}
int sum(int x1,int y1,int x2,int y2)
{return Getsum(x2,y2)-Getsum(x1-1,y2)-Getsum(x2,y1-1)+Getsum(x1-1,y1-1);
}
int main()
{int newx,newy;while(scanf("%d",&n) && n){w=n*2;scanf("%d",&m);memset(c,0,sizeof c);cnt=0;for(int i=1;i<=m;i++){scanf("%d%d%d%d",&p[i],&x[i],&y[i],&z[i]);if(p[i]==1){GetPoint(x[i],y[i],newx,newy);Get_ready(newx,newy);}}sort(h,h+cnt);for(int i=1;i<=m;i++){GetPoint(x[i],y[i],newx,newy);if(p[i]==1)update(newx,newy,z[i]);else{int x1,x2,y1,y2;x1=max(1,newx-z[i]),x2=min(w,newx+z[i]);y1=max(1,newy-z[i]),y2=min(w,newy+z[i]);printf("%d\n",sum(x1,y1,x2,y2));}}}
}
转载于:https://www.cnblogs.com/katarinayuan/p/6572868.html
HDU - 4456 Crowd相关推荐
- ajax提交成功清空表单,Ajax提交数据后,清空form表单
按钮不同,页面相同,还需要显示的数据不同,这里会由于页面的缓存问题,导致,每次点开这个页面显示的数据相同. 这不是我们想要的.这就需要清楚表单数据了. 如下: $('#myform')[0].rese ...
- hdu 4389 囧,打表
http://acm.hdu.edu.cn/showproblem.php?pid=4389 题意 :一个数能被他各个位数之和整除则符合要求,给L,R,问区间里有多少个数符合要求. 囧,居然打表就能过 ...
- HDU——1106排序(istringstream的使用、STLvector练习)
排序 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submiss ...
- hdu 5438 Ponds 拓扑排序
Ponds Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/contests/contest_showproblem ...
- HDU 1248 寒冰王座(全然背包:入门题)
HDU 1248 寒冰王座(全然背包:入门题) http://acm.hdu.edu.cn/showproblem.php?pid=1248 题意: 不死族的巫妖王发工资拉,死亡骑士拿到一张N元的钞票 ...
- hdu 1312 Red and Black 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1312 第二条深搜,题目并不难,但是做了我好久好久,由于一个细节,让我赌上了一个晚上的时间. 题目大意: ...
- HDU 1429 胜利大逃亡(续) (BFS+位压缩)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1429 胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others) ...
- hdu 1272 小希的迷宫
Problem Description 上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走.但是她设计迷宫的思路不一样,首先她认为所有的通道都应该 ...
- HDOJ 1157 HDU 1157 Who's in the Middle ACM 1157 IN HDU
MiYu原创, 转帖请注明 : 转载自 ______________白白の屋 题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=1157 题目描述: ...
最新文章
- JS+CSS3 360度全景图插件 - Watch3D.js
- 谈 JavaScript 浮点数计算精度问题(如0.1+0.2!==0.3)
- Generic Access Profile (GAP)
- MapReduce Java API-多输入路径方式
- Asp.Net Mvc3.0(MEF依赖注入实例)
- [Eclipse]GEF入门系列(序)
- 数据结构链表之栈,Python3简单实现——5
- matlab guide 打开图像并将图像显示到界面
- 网段和子网的区别_石笼网袋和石笼网的区别
- php双引号表示什么,PHP中的单引号和双引号字符串有什么区别?
- Android中在SurfaceView上高效绘图
- java高级进阶面试题
- matlab设计理想高斯巴特沃斯低通滤波器_完整二阶有源带通滤波器设计!(下载:教程+原理图+视频+代码)...
- VC使用: vs2003的工程升级到vs2010的问题汇总
- 可穿戴市场掘金:VC如何看上小小的ZEPP公司
- win10 路由虚拟服务器,水星 MW300R V10~V15 设置虚拟服务器操作说明 路由器
- arm mali 天梯图_手机cpu天梯图2019年4月最新排行 手机处理器性能天梯图
- 凸包问题-Graham 算法
- C++中using的三种用法
- 谷歌地图高清卫星地图、电子地图和地形图有什么区别?
热门文章
- python filecmp
- 编程通用知识 文件流
- opencv 直方图均等化
- scrapy.request
- 如何解除服务器注册,《天龙八部手游》服务器注册上限怎么办 服务器注册方法...
- golang | 使用goroutine和channel实现一个计算int64随机数各位数和的程序。
- Java基础学习总结(160)——JDK15正式发布,划时代的ZGC同时宣布转正
- MyBatis学习总结(12)——Mybatis+Mysql分页查询
- c语言主函数如何获得子函数的值,子函数中的数组值怎么带回主函数中?
- php5 mysql怎样下载,PHP5操作MySQL数据库(5)