HDU - 4456 Crowd
来源:互联网 发布:打鱼软件开发 编辑:程序博客网 时间:2024/06/07 11:54
题目见:
[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 5000000int 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; //不要负数和0 newy=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)); } } }}
0 0
- HDU 4456 Crowd
- HDU - 4456 Crowd
- HDU 4456 Crowd (cdq分治)
- hdu 4456 Crowd(二维树状数组)
- HDU 4456 Crowd (二维树状数组 + HASH)
- HDU 4456 Crowd 坐标旋转 二维树状数组
- HDU 4456 Crowd (坐标变换+树状数组+离散化)
- HDOJ 4456 Crowd 离散化+二维树状数组
- crowd windows
- crowd system
- HDU4456-Crowd
- jira、crowd集成篇
- Tree's a Crowd
- Tree's a Crowd
- Tree's a Crowd
- Atlassian Crowd安装
- build st-crowd
- Crowd 基本问题答疑
- RecyclerView使用详解(三)
- AndroidUI 视图动画-移动动画效果 (TranslateAnimation)
- 《Java编程思想》学习记录仪五 -- 类、方法、参数、返回值(第二章一切都是对
- DirectX11 颜色立方体示例Demo
- 【软考】原码、反码、补码和移码由来和转换
- HDU - 4456 Crowd
- BNUOJ---E. Rectangle
- 安卓控件使用系列4:TextView实现跑马灯效果
- 后缀数组模板
- 进阶之路___(弱校联萌好题集合)
- Android通过点击按钮改变Activity的背景颜色_个人笔记
- hdu 1009 FatMouse' Trade
- LightOJ 1213 Fantasy of a Summation
- 迷宫求解(使用队列