http://acm.hdu.edu.cn/showproblem.php?pid=4456

第一道二维树状数组就这么麻烦,题目要计算的是一个菱形范围内的和,于是可以把原来的坐标系旋转45度,就是求一个正方形范围内的和,这里还涉及到坐标系平移和放大,由于题目数据较大,用了离散化来保存需要处理的点,放在h数组内,对应的二维树状数组存在tree数组内。

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std; inline int lowbit(int x)
{
return x & (-x);
}
int p[],posx[],posy[],v[],h[],tree[],n,m,N,cnt; void update(int x,int y,int z)
{
for(int i = x;i <= N;i += lowbit(i))
{
for(int j = y;j <= N;j += lowbit(j))
{
int pos = lower_bound(h,h+cnt,i*N+j)-h;
tree[pos] += z;
}
}
} int getsum(int x,int y)
{
int ans = ;
for(int i = x;i > ;i -= lowbit(i))
{
for(int j = y;j > ;j -= lowbit(j))
{
int pos = lower_bound(h,h+cnt,i*N+j)-h;
if(h[pos] == i*N+j) ans += tree[pos];
}
}
return ans;
} int main()
{
while(scanf("%d",&n) && n)
{
memset(tree,,sizeof(tree));
int x,y;
N = *n;
cnt = ;
scanf("%d",&m);
for(int i = ;i <= m;i++)
{
scanf("%d%d%d%d",&p[i],&x,&y,&v[i]);
int xx = x-y+n,yy = x+y;
posx[i] = xx;
posy[i] = yy;
if(p[i] == )
{
for(int j = xx;j <= N;j += lowbit(j))
{
for(int k = yy;k <= N;k += lowbit(k))
{
h[cnt++] = j*N+k;
}
}
}
}
sort(h,h+cnt);
for(int i = ;i <= m;i++)
{
if(p[i] == ) update(posx[i],posy[i],v[i]);
else
{
int x1 = max(,posx[i]-v[i]),y1 = max(,posy[i]-v[i]);
int x2 = min(N,posx[i]+v[i]),y2 = min(N,posy[i]+v[i]);
printf("%d\n",getsum(x2,y2)-getsum(x2,y1-)-getsum(x1-,y2)+getsum(x1-,y1-));
}
}
}
return ;
}

HDU_4456_二维树状数组的更多相关文章

  1. 二维树状数组 BZOJ 1452 [JSOI2009]Count

    题目链接 裸二维树状数组 #include <bits/stdc++.h> const int N = 305; struct BIT_2D { int c[105][N][N], n, ...

  2. HDU1559 最大子矩阵 (二维树状数组)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1559 最大子矩阵 Time Limit: 30000/10000 MS (Java/Others)  ...

  3. POJMatrix(二维树状数组)

    Matrix Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 22058   Accepted: 8219 Descripti ...

  4. poj 1195:Mobile phones(二维树状数组,矩阵求和)

    Mobile phones Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 14489   Accepted: 6735 De ...

  5. Codeforces Round #198 (Div. 1) D. Iahub and Xors 二维树状数组*

    D. Iahub and Xors   Iahub does not like background stories, so he'll tell you exactly what this prob ...

  6. POJ 2155 Matrix(二维树状数组+区间更新单点求和)

    题意:给你一个n*n的全0矩阵,每次有两个操作: C x1 y1 x2 y2:将(x1,y1)到(x2,y2)的矩阵全部值求反 Q x y:求出(x,y)位置的值 树状数组标准是求单点更新区间求和,但 ...

  7. [poj2155]Matrix(二维树状数组)

    Matrix Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 25004   Accepted: 9261 Descripti ...

  8. POJ 2155 Matrix (二维树状数组)

    Matrix Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 17224   Accepted: 6460 Descripti ...

  9. [POJ2155]Matrix(二维树状数组)

    题目:http://poj.org/problem?id=2155 中文题意: 给你一个初始全部为0的n*n矩阵,有如下操作 1.C x1 y1 x2 y2 把矩形(x1,y1,x2,y2)上的数全部 ...

随机推荐

  1. Jpa自定义查询报错(Failed to convert from type [java.lang.Object[]] to type)

    Jpa自定义查询报错 问题背景 今天遇到一个奇怪的报错"Failed to convert from type [java.lang.Object[]] to type",这个报错 ...

  2. 一个C#开发者重温Java的心路历程

    前言 我们都知道软件开发是工科,不是理科:本质上和电工.钳工是一样的. 也就是说,软件技术成长也与电工.钳工的技术成长是一样的,靠的是练,而不是学. 所以,很多时候,我们称应届大学生是一张白纸,啥也不 ...

  3. Map2Shp软件字符编码解决方案——彻底杜绝Shape格式乱码

    在使用Shape文件时,如果里面有中文属性信息时,经常会遇到属性信息变为乱码.尤其是ArcGIS10.2.1之后,Esri改变了软件的默认字符编码规则,打开之前保存的Shapefile文件,总会不时遇 ...

  4. docker学习1--dockerfile

    记录docker学习过程 实践启动一个redis server 命令之前 要弄懂 dockfile 镜像 容器 三者概念以及三者之间的关系 dockerfile格式 # Comment 注释 INST ...

  5. JS中Cookie、localStorage、sessionStorage三者的区别

    cookie:大小4k,一般由服务器生成,可设置失效时间,关闭浏览器后失效,与服务器通信时:每次都会携带HTTP头中,如果使用cookie保存过多数据会带来性能问题 localhostStorage: ...

  6. 什么是aPaas?aPaas与低代码又是如何促进应用程序开发现代化的?

    从软件即服务(SaaS)到基础设施即服务(IaaS),云计算的兴起使“一切皆服务”(XaaS)模型得以泛滥,而aPaaS可能是这些模型中最鲜为人知的模型.随着aPaaS市场预计将从2018年的近90亿 ...

  7. 关于爬虫的日常复习(17)——scrapy系列1

  8. 12.方法重载overload

    方法重载:overload 重载就是在一个类中,有相同的函数名称,但形参不同的函数 方法重载的规则: 方法名称必须相同 参数列表必须不同(个数不同.或类型不同.参数排列顺序不同等) 方法的返回值类型可 ...

  9. 3.JavaSE之注释

  10. CTF中关于XXE(XML外部实体注入)题目两道

    题目:UNCTF-Do you like xml? 链接:http://112.74.37.15:8008/ hint:weak password (弱密码) 1.观察后下载图片拖进WINHEX发现提 ...