HDU 4456(二维树状数组+坐标转换)
题目链接:Problem - 4456
看别人叙述看的心烦,于是我自己画了一张图。
上图。
上代码
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std;
const int maxn = ;
const int maxm = 3e6+; //这里大小的确定应该是80000*log2(20000)*log2(20000),算出来大约是一千三百万,数据应该是水一些,然而看所有人的题解,都是四百万,呵呵呵,这其中一定有什么交易。
int p[maxn],x[maxn],y[maxn],z[maxn];
int arr[maxm];
int cnt[maxm];
int num = ;
int len = ;
int w = ;
int lowbit(int x)
{
return x&(-x);
}
void pre(int x,int y)
{
for(int i=x;i<=w;i+=lowbit(i))
{
for(int j=y;j<=w;j+=lowbit(j))
{
cnt[num++] = i*w+j;
}
}
}
void sum(int x,int y,int tt)
{
for(int i=x;i<=w;i+=lowbit(i))
{
for(int j=y;j<=w;j+=lowbit(j))
{
int id = lower_bound(cnt,cnt+len,i*w+j)-cnt;
arr[id] += tt;
}
}
}
int getsum(int x,int y)
{
x=max(x,); x=min(x,w); //边界
y=max(y,); y=min(y,w);
int summ = ;
for(int i=x;i>;i-=lowbit(i))
{
for(int j=y;j>;j-=lowbit(j))
{
int id = lower_bound(cnt,cnt+len,i*w+j)-cnt;
if(cnt[id]==(i*w+j)) summ += arr[id];
}
}
return summ;
}
int main()
{
int n,m;
while(scanf("%d",&n)!=EOF&&n)
{
scanf("%d",&m);
w = *n;
memset(cnt,,sizeof(cnt));
memset(arr,,sizeof(arr));
num = ;
for(int i=;i<=m;i++)
{
scanf("%d %d %d %d",&p[i],&x[i],&y[i],&z[i]);
int nx = x[i]-y[i]+n;
int ny = x[i]+y[i];
if(p[i]==)
pre(nx,ny);
}
sort(cnt,cnt+num);
len = unique(cnt,cnt+num)-cnt;
for(int i=;i<=m;i++)
{
int nx = x[i]-y[i]+n;
int ny = x[i]+y[i];
if(p[i]==)
{
sum(nx,ny,z[i]);
}
else
{
int x1,y1,x2,y2,x3,y3,x4,y4;
x1 = nx+z[i];y1 = ny+z[i];
x2 = nx+z[i];y2 = ny-z[i];y2--;
x3 = nx-z[i];y3 = ny+z[i];x3--;
x4 = nx-z[i];y4 = ny-z[i];x4--;y4--;
printf("%d\n",getsum(x1,y1)-getsum(x2,y2)-getsum(x3,y3)+getsum(x4,y4));
}
}
}
return ;
}
HDU 4456(二维树状数组+坐标转换)的更多相关文章
- hdu 2642 二维树状数组 单点更新区间查询 模板水题
Stars Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/65536 K (Java/Others) Total Subm ...
- hdu 2642二维树状数组 单点更新区间查询 模板题
二维树状数组 单点更新区间查询 模板 从零开始借鉴http://www.2cto.com/kf/201307/227488.html #include<stdio.h> #include& ...
- 【 HDU - 4456 】Crowd (二维树状数组、cdq分治)
BUPT2017 wintertraining(15) #5A HDU 4456 题意 给你一个n行n列的格子,一开始每个格子值都是0.有M个操作,p=1为第一种操作,给格子(x,y)增加z.p=2为 ...
- hdu 5517 Triple(二维树状数组)
Triple Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Sub ...
- HDU 5517---Triple(二维树状数组)
题目链接 Problem Description Given the finite multi-set A of n pairs of integers, an another finite mult ...
- HDU 5517 【二维树状数组///三维偏序问题】
题目链接:[http://acm.split.hdu.edu.cn/showproblem.php?pid=5517] 题意:定义multi_set A<a , d>,B<c , d ...
- HDU 5465 Clarke and puzzle Nim游戏+二维树状数组
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5465 Clarke and puzzle Accepts: 42 Submissions: 26 ...
- HDU_4456_二维树状数组
http://acm.hdu.edu.cn/showproblem.php?pid=4456 第一道二维树状数组就这么麻烦,题目要计算的是一个菱形范围内的和,于是可以把原来的坐标系旋转45度,就是求一 ...
- HDU1559 最大子矩阵 (二维树状数组)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1559 最大子矩阵 Time Limit: 30000/10000 MS (Java/Others) ...
随机推荐
- 把aspx页面输出成xml的方法注意事项
先贴代码 Response.Charset = "gb2312"; Response.ContentType = "text/xml"; Response.Co ...
- 使用Visual C++编程
1.Visual C++的主要组件 Visual C++支持遵循C++11语言标准的C++语句,C++11语言标准是在ISO/IEC 14882:2011文档中定义的.Visual C++还没有实现该 ...
- Centos下 Nginx安装与配置
网上找了好多资料.都很难找全,这里以这个目录为主,进行备注. Nginx是一款轻量级的网页服务器.反向代理服务器.相较于Apache.lighttpd具有占有内存少,稳定性高等优势.它最常的用途是提供 ...
- table导出到excel的两种方法
1. 用table2excel 的js文件,这种方法没有IE兼容性 需要在文件中导入 <script type="text/javascript" src="< ...
- Unable to chmod /system/build.prop.: Read-only file system
Unable to chmod /system/build.prop.: Read-only file system 只读文件系统 所以需要更改 使用下面的命令 mount -o remount,rw ...
- 笨方法学python--第一个程序
该章主要知识点有: 1 print 打印,有双引号,单引号 2 分析报错信息,积累经验 3 # -*- coding:utf-8 -*-,可以输出汉字 4 井号,# ,注释, 英文名 octothor ...
- Oracle表和表数据恢复
Oracle数据库表及表数据的恢复 1. 表恢复 对误删的表,只要没有使用 purge 永久删除选项,那么基本上是能从 flashback table 区恢复回来的. 数据表和其中的数据都是可以恢复回 ...
- 什么是dtd文件,为什么需要
DTD为英文Document Type Definition,中文意思为“文档类定义”.DTD肩负着两重任务:一方面它帮助你编写合法的代码,另一方面它让浏览器正确地显示器代码.也许你会问它们居然有这样 ...
- linux命令chown和chmod什么区别
chown一般用来 更改属主.也就是文件所属用户.chmod功能要比chown要强大.可更改文件所有属性和权限.只有管理员账户才有权限用此命令. chown 是修改文件的所有者(owner),和所属组 ...
- Jmeter的优点是什么?除了轻量级,它和LoadRunner有什么本质区别
1.jmeter的架构和loadrunner原理一样,都是通过中间代理,监控和收集并发客户端发出的指令,把他们生成脚本,再发送到应用服务器,再监控服务器反馈结果的一个过程: 2.分布式中间代理功能在j ...