题目见:
[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. Linux虚拟机连不上网
  2. nginx 缓存时间说明
  3. session登录练习使用解决null显示问题
  4. 排查链接是否失效_如何进行移动站点流量排查?
  5. 只用了2个周末,15岁中国学生斩获苹果WWDC奖学金
  6. centos安装无线网卡驱动_CentOS下显卡驱动安装的相关思考
  7. Linux学习:第三章-Linux常用命令-1
  8. 互相引用 spring_听说你还不知道Spring是如何解决循环依赖问题的?
  9. php 添加样式,PHP实现可自定义样式的分页类
  10. SCCM2007系列教程之八资产管理
  11. 多行查询结果合并sys_connect_by_path
  12. 集成Glide4.3.1出错!AbstractMethodError: abstract method void com.bumptech.glide.module
  13. 在moss上自己总结了点小经验。。高手可以飘过
  14. 麻省理工18年春软件构造课程阅读04“代码评审”
  15. python爬虫:Scrapy框架爬取纳斯达克(NASDAQ)股票数据
  16. 一篇不错的wsl文章
  17. 关于MC34063的奇怪问题参考解决方案(mc34063升压失败、输出等于输入,输出电压低于输入)
  18. 永磁同步电机力矩控制(九):定子磁场中的若干相关概念
  19. 计算机开关键是什么符号,按钮开关符号知识大盘点 【图文】
  20. 梦幻西游手游300级装备、30级宝石、抽奖后台、坐骑版本搭建技术讲解

热门文章

  1. psql 时间日期操作符和函数
  2. Numpy Mathematical functions 数学函数
  3. 求矩形的最小值c语言,C语言复习---矩形法求定积分函数
  4. 如何解决常见的 Active Directory 复制错误
  5. Java、Javascript、Javaweb三者的区别
  6. Netty学习总结(1)——Netty入门介绍
  7. java 从已知日期计算干支纪日_两个日期计算
  8. java aes解密算法_使用java实现AES算法的加解密(亲测可用)
  9. python怎么去重_python列表如何去重
  10. c语言字符串型函数是,C语言字符/字符串相关函数收藏大全