HDU_4456_二维树状数组
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_二维树状数组的更多相关文章
- 二维树状数组 BZOJ 1452 [JSOI2009]Count
题目链接 裸二维树状数组 #include <bits/stdc++.h> const int N = 305; struct BIT_2D { int c[105][N][N], n, ...
- HDU1559 最大子矩阵 (二维树状数组)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1559 最大子矩阵 Time Limit: 30000/10000 MS (Java/Others) ...
- POJMatrix(二维树状数组)
Matrix Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 22058 Accepted: 8219 Descripti ...
- poj 1195:Mobile phones(二维树状数组,矩阵求和)
Mobile phones Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 14489 Accepted: 6735 De ...
- 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 ...
- POJ 2155 Matrix(二维树状数组+区间更新单点求和)
题意:给你一个n*n的全0矩阵,每次有两个操作: C x1 y1 x2 y2:将(x1,y1)到(x2,y2)的矩阵全部值求反 Q x y:求出(x,y)位置的值 树状数组标准是求单点更新区间求和,但 ...
- [poj2155]Matrix(二维树状数组)
Matrix Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 25004 Accepted: 9261 Descripti ...
- POJ 2155 Matrix (二维树状数组)
Matrix Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 17224 Accepted: 6460 Descripti ...
- [POJ2155]Matrix(二维树状数组)
题目:http://poj.org/problem?id=2155 中文题意: 给你一个初始全部为0的n*n矩阵,有如下操作 1.C x1 y1 x2 y2 把矩形(x1,y1,x2,y2)上的数全部 ...
随机推荐
- Django 单表查询
前言 如何只单独测试django中的某一个py文件呢?或者说如何书写测试脚本? 我们可以在任意一个py文件(应用下的tests或者自己新建一个)中书写以下代码: 前期准备 创建一个电影表 class ...
- 31.用python中的serial向串口发送和接收数据(案例一)
代码功能说明:1.向串口助手发送十六进制数据:0X01,0X03,0X00,0X00,0X00,0X01,0X84,0X0A: 2.用串口助手向代码发送数据,并将发送过来的数据保存在数据库中,按数据和 ...
- 13.利用pymysql创建变量类型的表名解说
在练习爬虫爬取数据时,想将爬取的数据用pymysql存储到数据库中,并且存储时的表名是一个变量,但在写完代码运行后经常出面1064的错误代码,在网上查找相关解决方法,但一直找不到完美的解决方法, 通过 ...
- iOS从gif获取图片数组
iOS中,当我们UIImageView实现动画时,如果图片是gif则不会自动播放gif图片,我们可以从gif图片中读取出每一帧的图片,然后组成图片数组,之后再实现使用UIImageView实现动画效果 ...
- C# 阿里云查询、删除文件
class Program { static string regionId = "cn-shanghai"; static string accessKeyId = " ...
- 【转】在NetBeans上搭建Android SDK环境
本文将介绍在NetBeans 6.8上搭建Android SDK环境,目前Android在Netbeans上进行开发需要借助nbandroid的平台插件. 我们刚刚介绍过<MyEclipse上搭 ...
- 题解 LA3720
题目大意 多组数据,每组数据给定两个整数 \(n,m\),请求出 \(n\times m\) 的点阵(即 \((n-1)\times(m-1)\) 的方格)中有多少条非水平竖直的经过至少两个格点的不同 ...
- Java.前端.Layer.open.btn验证无效
今天遇到了一个很可笑的问题,在.Layer弹窗open中设置了多个按钮,只有yes按钮有效,btn2点击后直接关闭弹窗,排查了2个小时后终于解决,就是btn2要return false! var in ...
- Scrapy解析器xpath
一.使用xpath 不在scrapy框架中通过response from scrapy.http import HtmlResponse HtmlResponse->TextResponse-& ...
- javaweb-codereview 学习记录-3
Class类加载流程 实际上就是ClassLoader将会调用loadclass来尝试加载类,首先将会在jvm中尝试加载我们想要加载的类,如果jvm中没有的话,将调用自身的findclass,此时要是 ...