HDU 1892(书架统计 二维树状数组)
题意是在二维平面上在一些位置上进行数据的增删改查操作,使用树状数组(了解树状数组点这里)
原来的树状数组在求区间和时是 sum( x, y ) = getsum( y ) - getsum( x - 1 ),
在这道题中是 sum( x1, y1, x2, y2 ) = getsum( x2,y2 ) - getsum( x1-1, y2 ) - getsum( x2, y1-1 ) + getsum( x1-1, y1-1 )
如图所示:
注意所给位置是从 0 开始算的,用树状数组时要从 1 开始算,也就是说要在所有的坐标上加 1 。还要注意书架上开始时每个位置都有一本书。
代码如下:
#include <bits/stdc++.h>
using namespace std;
int x,y,xx,yy,n,t,k,cnt,num,shelf[][];
char ch;
int lowbit(int x)
{
return x & (-x);
}
int aa(int x,int y)
{
int sum = ;
for(int i = x; i > ; i -= lowbit(i))
for(int j = y; j > ; j -= lowbit(j))
sum += shelf[i][j];
return sum;
}
void update(int x,int y,int val)
{
for(int i = x; i <= ; i+=lowbit(i))
for(int j = y; j <= ; j+=lowbit(j))
shelf[i][j] += val;
}
void init()
{
memset(shelf,,sizeof(shelf));
for(int i = ; i < ; ++i)
for(int j = ; j < ; ++j)
update(i,j,);
}
void s(int x,int y,int xx,int yy)
{
if(x>xx)
{
k = xx;
xx = x;
x = k;
}
if(y>yy)
{
k = yy;
yy = y;
y = k;
}
printf("%d\n",aa(xx+,yy+)-aa(x,yy+)-aa(xx+,y)+aa(x,y));
} int get_s(int x,int y)
{
return aa(x,y) - aa(x-,y) - aa(x,y-) + aa(x-,y-);
}
void d(int x,int y,int n)
{
k = get_s(x+,y+);
n = n>k?k:n;
update(x+,y+,-n);
}
void m(int x,int y,int xx,int yy,int n)
{
k = get_s(x+,y+);
n = n>k?k:n;
update(x+,y+,-n);
update(xx+,yy+,n);
}
int main()
{
scanf("%d",&t);
for(cnt = ; cnt <= t; ++cnt)
{
scanf("%d",&num);
printf("Case %d:\n",cnt);
init();
while(num--)
{
scanf("%c",&ch);
if(ch=='S')
{
scanf("%d%d%d%d",&x,&y,&xx,&yy);
s(x,y,xx,yy);
}
else if(ch=='A')
{
scanf("%d%d%d",&x,&y,&n);
update(x+,y+,n);
}
else if(ch=='D')
{
scanf("%d%d%d",&x,&y,&n);
d(x,y,n);
}
else if(ch=='M')
{
scanf("%d%d%d%d%d",&x,&y,&xx,&yy,&n);
m(x,y,xx,yy,n);
}
else num++;
}
}
return ;
}
HDU 1892(书架统计 二维树状数组)的更多相关文章
- HDU 1892 See you~ (二维树状数组)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1892 See you~ Problem Description Now I am leaving h ...
- 【 HDU - 4456 】Crowd (二维树状数组、cdq分治)
BUPT2017 wintertraining(15) #5A HDU 4456 题意 给你一个n行n列的格子,一开始每个格子值都是0.有M个操作,p=1为第一种操作,给格子(x,y)增加z.p=2为 ...
- hdu 2642 Stars 【二维树状数组】
题目 题目大意:Yifenfei是一个浪漫的人,他喜欢数天上的星星.为了使问题变得更容易,我们假设天空是一个二维平面,上面的星星有时会亮,有时会发暗.最开始,没有明亮的星星在天空中,然后将给出一些信息 ...
- 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 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& ...
随机推荐
- 给 Haproxy 创建日志文件
背景介绍:默认下的Haproxy配置是不会生成日志文件的,而无运行日志,无法确定系统运行是否流畅,无法提起预判可能发生的故障 创建Haproxy日志文件的步骤如下vi /etc/rsyslog.con ...
- Hyper-V 配置虚拟网络
Hyper-V功能异常强大,不了解的自行GG 本文介绍如何使用Hyper-V在本机建立虚拟网络,创建虚拟交换机 打开Hyper-V Manager,选择右边侧边栏的Virtual Switch Man ...
- 构建MFS分布式文件系统
++++++++++++++构建MFS分布式文件系统++++++++++++++PB级别:企业存储空间达到PB级别,即100万GB空间.(1PB=1000TB,1TB=1000GB,1GB=1000M ...
- cf351B Jeff and Furik (树状数组)
逆序对数=0的时候,这个数列是有序的 然后交换相邻的,看哪个比较大,逆序对数会加1或减1 Jeff用的是最优策略所以他肯定让逆序对数-1 设f[i]表示Jeff操作前,逆序对数为i,最终的期望次数 那 ...
- 2019 校内赛 RPG的天赋分支(贪心)
Problem Description 很多游戏都有天赋树的概念,天赋树的不同分支具有不同的属性加成,那么合理选择分支就非常重要了.Luke最近沉迷一款RPG游戏,它的天赋树机制如下:角色具有n个可选 ...
- Thinkphp5 captcha扩展包安装,验证码验证以及点击刷新
首先下载 captcha扩展包,↓ 下载附件,解压到vendor目录下: 然后进入application/config.php添加配置信息: //验证码 'captcha' => ...
- Centos 7下下载和安装docker
sudo yum install -y device-mapper sudo modprobe dm_mod ls -l /sys/class/misc/device-mapper sudo rpm ...
- eclipse 设置
修改工作空间默认编码:Window --> Preferences --> General --> Workspace --> Text file encoding --> ...
- 你应该要知道的vue.js
前言 小组同事最近都在学习前端,目前我们小组前端技术栈主要是vue.在和同事交流过程成,发现他们对vue都不了解,所以整理了问的比较多的问题. 组件data为什么必须是函数? 因为组件可能被多处使用, ...
- 第二十九篇-Fragment动态用法
效果图: 上节学习了静态添加Fragment的方法,这节学习动态添加方法. 主页面 layout.xml Fragment页面 layout2.xml 实现功能,当点击主页面的button时,将Fra ...