题意是在二维平面上在一些位置上进行数据的增删改查操作,使用树状数组(了解树状数组点这里

原来的树状数组在求区间和时是 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(书架统计 二维树状数组)的更多相关文章

  1. HDU 1892 See you~ (二维树状数组)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1892 See you~ Problem Description Now I am leaving h ...

  2. 【 HDU - 4456 】Crowd (二维树状数组、cdq分治)

    BUPT2017 wintertraining(15) #5A HDU 4456 题意 给你一个n行n列的格子,一开始每个格子值都是0.有M个操作,p=1为第一种操作,给格子(x,y)增加z.p=2为 ...

  3. hdu 2642 Stars 【二维树状数组】

    题目 题目大意:Yifenfei是一个浪漫的人,他喜欢数天上的星星.为了使问题变得更容易,我们假设天空是一个二维平面,上面的星星有时会亮,有时会发暗.最开始,没有明亮的星星在天空中,然后将给出一些信息 ...

  4. hdu 5517 Triple(二维树状数组)

    Triple Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Sub ...

  5. HDU 5517---Triple(二维树状数组)

    题目链接 Problem Description Given the finite multi-set A of n pairs of integers, an another finite mult ...

  6. HDU 5517 【二维树状数组///三维偏序问题】

    题目链接:[http://acm.split.hdu.edu.cn/showproblem.php?pid=5517] 题意:定义multi_set A<a , d>,B<c , d ...

  7. HDU 5465 Clarke and puzzle Nim游戏+二维树状数组

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5465 Clarke and puzzle  Accepts: 42  Submissions: 26 ...

  8. hdu 2642 二维树状数组 单点更新区间查询 模板水题

    Stars Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/65536 K (Java/Others) Total Subm ...

  9. hdu 2642二维树状数组 单点更新区间查询 模板题

    二维树状数组 单点更新区间查询 模板 从零开始借鉴http://www.2cto.com/kf/201307/227488.html #include<stdio.h> #include& ...

随机推荐

  1. codevs 2606 约数和问题 (数学+分块)

    题目描述 Description Smart最近沉迷于对约数的研究中. 对于一个数X,函数f(X)表示X所有约数的和.例如:f(6)=1+2+3+6=12.对于一个X,Smart可以很快的算出f(X) ...

  2. Data truncation: Data too long for column 'content' at row 1

    项目运行报错: Data truncation: Data too long for column 'content' at row 1 是由于字段长度太小导致的 搜索mysql 中text 字段长度 ...

  3. 利用SSH上传、下载(使用sz与rz命令)

    安装yum -y install lrzsz 用法sz用法:从服务器发送出去相当于下载一个文件sz filename 下载多个文件sz filename1 filename2rz用法:从外面接收回来, ...

  4. DP及其优化

    常见DP模型及其构造 序列DP ARC074 RGB Sequence 题意 给你一个长度为 \(n\) 的序列和 \(m\) 组约束条件,每组条件形如 \(l_i,r_i,x_i\),表示序列上的 ...

  5. 【CF981F】Round Marriage(二分答案,二分图匹配,Hall定理)

    [CF981F]Round Marriage(二分答案,二分图匹配,Hall定理) 题面 CF 洛谷 题解 很明显需要二分. 二分之后考虑如果判定是否存在完备匹配,考虑\(Hall\)定理. 那么如果 ...

  6. mailkit库收发邮件

    mailkit库用于收发邮件.这个库可以替代C#自带的发邮件库 环境  W10 / VS2017CMMT / MailKit version="2.0.3" "net46 ...

  7. [WC2008]游览计划 解题报告

    [WC2008]游览计划 斯坦纳树板子题,其实就是状压dp 令\(dp_{i,s}\)表示任意点\(i\)联通关键点集合\(s\)的最小代价 然后有转移 \[ dp_{i,S}=\min_{T\in ...

  8. [APIO/CTSC 2007]数据备份(贪心+堆)

    你在一家 IT 公司为大型写字楼或办公楼(offices)的计算机数据做备份.然而数据备份的工作是枯燥乏味的,因此你想设计一个系统让不同的办公楼彼此之间互相备份,而你则坐在家中尽享计算机游戏的乐趣. ...

  9. Fiddler 安装配置及使用技巧

    下载最新版即可: https://www.telerik.com/fiddler pc配置: pc端上的配置较为简单,主要是记录一下遇到的一些bug以及解决方法. options>HTTPS  ...

  10. ArcGIS for qml -测距

    源码:https://github.com/sueRimn/ArcGIS-for-qml-demos 实现求地图上两点之间距离功能 作者: 狐狸家的鱼 Github: 八至 版权声明:如需转载,请联系 ...