题目见:
[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相关推荐

  1. ajax提交成功清空表单,Ajax提交数据后,清空form表单

    按钮不同,页面相同,还需要显示的数据不同,这里会由于页面的缓存问题,导致,每次点开这个页面显示的数据相同. 这不是我们想要的.这就需要清楚表单数据了. 如下: $('#myform')[0].rese ...

  2. hdu 4389 囧,打表

    http://acm.hdu.edu.cn/showproblem.php?pid=4389 题意 :一个数能被他各个位数之和整除则符合要求,给L,R,问区间里有多少个数符合要求. 囧,居然打表就能过 ...

  3. HDU——1106排序(istringstream的使用、STLvector练习)

    排序 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submiss ...

  4. hdu 5438 Ponds 拓扑排序

    Ponds Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/contests/contest_showproblem ...

  5. HDU 1248 寒冰王座(全然背包:入门题)

    HDU 1248 寒冰王座(全然背包:入门题) http://acm.hdu.edu.cn/showproblem.php?pid=1248 题意: 不死族的巫妖王发工资拉,死亡骑士拿到一张N元的钞票 ...

  6. hdu 1312 Red and Black 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1312 第二条深搜,题目并不难,但是做了我好久好久,由于一个细节,让我赌上了一个晚上的时间. 题目大意: ...

  7. HDU 1429 胜利大逃亡(续) (BFS+位压缩)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1429 胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others)  ...

  8. hdu 1272 小希的迷宫

    Problem Description 上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走.但是她设计迷宫的思路不一样,首先她认为所有的通道都应该 ...

  9. HDOJ 1157 HDU 1157 Who's in the Middle ACM 1157 IN HDU

    MiYu原创, 转帖请注明 : 转载自 ______________白白の屋   题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=1157 题目描述: ...

最新文章

  1. JS+CSS3 360度全景图插件 - Watch3D.js
  2. 谈 JavaScript 浮点数计算精度问题(如0.1+0.2!==0.3)
  3. Generic Access Profile (GAP)
  4. MapReduce Java API-多输入路径方式
  5. Asp.Net Mvc3.0(MEF依赖注入实例)
  6. [Eclipse]GEF入门系列(序)
  7. 数据结构链表之栈,Python3简单实现——5
  8. matlab guide 打开图像并将图像显示到界面
  9. 网段和子网的区别_石笼网袋和石笼网的区别
  10. php双引号表示什么,PHP中的单引号和双引号字符串有什么区别?
  11. Android中在SurfaceView上高效绘图
  12. java高级进阶面试题
  13. matlab设计理想高斯巴特沃斯低通滤波器_完整二阶有源带通滤波器设计!(下载:教程+原理图+视频+代码)...
  14. VC使用: vs2003的工程升级到vs2010的问题汇总
  15. 可穿戴市场掘金:VC如何看上小小的ZEPP公司
  16. win10 路由虚拟服务器,水星 MW300R V10~V15 设置虚拟服务器操作说明 路由器
  17. arm mali 天梯图_手机cpu天梯图2019年4月最新排行 手机处理器性能天梯图
  18. 凸包问题-Graham 算法
  19. C++中using的三种用法
  20. 谷歌地图高清卫星地图、电子地图和地形图有什么区别?

热门文章

  1. python filecmp
  2. 编程通用知识 文件流
  3. opencv 直方图均等化
  4. scrapy.request
  5. 如何解除服务器注册,《天龙八部手游》服务器注册上限怎么办 服务器注册方法...
  6. golang | 使用goroutine和channel实现一个计算int64随机数各位数和的程序。
  7. Java基础学习总结(160)——JDK15正式发布,划时代的ZGC同时宣布转正
  8. MyBatis学习总结(12)——Mybatis+Mysql分页查询
  9. c语言主函数如何获得子函数的值,子函数中的数组值怎么带回主函数中?
  10. php5 mysql怎样下载,PHP5操作MySQL数据库(5)