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

原来的树状数组在求区间和时是 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. 牛客小白月赛12 H(dfs序+线段树),F(分块思想+bit),J(二分)

    H 华华和月月种树 链接:https://ac.nowcoder.com/acm/contest/392/H 思路:先得到整棵树最终的形态,在这棵树上进行三种操作,用dfs跑下,第二种操作就直接对最终 ...

  2. thinkphp5.0.7 &===composer更新===& thinkphp5.0.9 debug “controller not found”

    当thinkphp5.0.7更新到最新版本时,问题来了... 控制类加载不了. 上线版本出现这个情况,也就悲哀了.====== 那么这种问题主要是因为 composer 没有合理的使用: 详细参考:如 ...

  3. 「2017 Multi-University Training Contest 8」2017多校训练8

    1009 I am your Father! (最小树形图-朱刘算法) 题目链接 HDU6141 I am your Father! 求有向图最大生成树,要求n的父节点尽量小. 我们将所有wi变为-w ...

  4. Android热点回顾第一期

    本文由 ImportNew - 陈强 翻译自 androidweekly.如需转载本文,请先参见文章末尾处的转载要求. Importnew注:欢迎Android爱好者参与翻译文中提及的教程,请私信联系 ...

  5. 「ZJOI2016」大森林 解题报告

    「ZJOI2016」大森林 神仙题... 很显然线段树搞不了 考虑离线操作 我们只搞一颗树,从位置1一直往后移动,然后维护它的形态试试 显然操作0,1都可以拆成差分的形式,就是加入和删除 因为保证了操 ...

  6. [CQOI2017]老C的方块

    题目描述 https://www.lydsy.com/JudgeOnline/problem.php?id=4823 题解 观察那四种条件 有没有什么特点? 我们可以把蓝线两边的部分看做两个区域,这样 ...

  7. Git Base For Linux

    GitHub实战系列汇总:http://www.cnblogs.com/dunitian/p/5038719.html Linux安装git,做个记录吧(使用github提供的隐私邮箱) # git官 ...

  8. 浅析 @PathVariable 和 @RequestParam(转发,非原创)

    首先 上两个地址:地址①http://localhost:8989/SSSP/emps?pageNo=2地址②http://localhost:8989/SSSP/emp/7如果想获取地址①中的 pa ...

  9. Zabbix历史数据清理

    特别提醒: a.文中测试的Zabbix版本为 3.0.3 . b.清理数据属于高危操作,请在测试环境中验证后再执行线上操作!!! 1.统计数据库中每个表所占的空间: mysql> SELECT ...

  10. jconsole 连接 wildfly 10 监控

    1,远程wildfly服务器: 访问:http://211.100.75.242:9990 按照提示添加用户,重启后可以登录进入.成功. 2,省事做法.本地解压wildfly服务器,进入wildfly ...