题意:

最多1000*1000的方格,各方格开始有一本书

有四种操作:对指定方格把书拿走或向里面放书,从一个方格那一定量的书放到另一个方格,查询给定对角线顶点的坐标的矩形范围内包含的书的总数

分析:

二维BIT,注意方格的书数小于拿书数量的情况

#include <map>
#include <set>
#include <list>
#include <cmath>
#include <queue>
#include <stack>
#include <cstdio>
#include <vector>
#include <string>
#include <cctype>
#include <complex>
#include <cassert>
#include <utility>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
using namespace std;
typedef pair<int,int> PII;
typedef long long ll;
#define lson l,m,rt<<1
#define pi acos(-1.0)
#define rson m+1,r,rt<<11
#define All 1,N,1
#define N 1010
#define read freopen("in.txt", "r", stdin)
const ll INFll = 0x3f3f3f3f3f3f3f3fLL;
const int INF= 0x7ffffff;
const int mod = ;
int sum[N][N],n,a[N][N];
int lowbit(int x){
return (x)&(-x);
}
void add(int x,int y,int v){
for(int i=x;i<N;i+=lowbit(i))
for(int j=y;j<N;j+=lowbit(j)){
sum[i][j]+=v;
}
}
int sum1(int x,int y){
int num=;
for(int i=x;i>;i-=lowbit(i))
for(int j=y;j>;j-=lowbit(j))
num+=sum[i][j];
return num;
}
int main()
{
int t,test=;
char op[];
int x1,x2,y1,y2,v,q;
scanf("%d",&t);
while(t--){
memset(sum,,sizeof(sum));
for(int i=;i<N;++i)
for(int j=;j<N;++j){
a[i][j]=;
add(i,j,);
}
printf("Case %d:\n",++test);
scanf("%d",&q);
while(q--){
scanf("%s",op);
if(op[]=='S'){
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
int sx=min(x1,x2);
int ex=max(x1,x2);
int sy=min(y1,y2);
int ey=max(y1,y2);
sx++;ex++;
sy++;ey++;
int tmp=sum1(ex,ey)-sum1(sx-,ey)-sum1(ex,sy-)+sum1(sx-,sy-);
printf("%d\n",tmp);
}
else if(op[]=='A'){
scanf("%d%d%d",&x1,&y1,&v);
x1++;
y1++;
add(x1,y1,v);
a[x1][y1]+=v;
}
else if(op[]=='D'){
scanf("%d%d%d",&x1,&y1,&v);
x1++;
y1++;
if(v>a[x1][y1])v=a[x1][y1];
add(x1,y1,-v);
a[x1][y1]-=v;
}
else if(op[]=='M'){
scanf("%d%d%d%d%d",&x1,&y1,&x2,&y2,&v);
x1++;y1++;
x2++;y2++;
if(a[x1][y1]<v)
v=a[x1][y1];
add(x1,y1,-v);
add(x2,y2,v);
a[x1][y1]-=v;
a[x2][y2]+=v;
}
}
}
return ;
}

HDU 1892-See you(二维BIT)的更多相关文章

  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 1892(书架统计 二维树状数组)

    题意是在二维平面上在一些位置上进行数据的增删改查操作,使用树状数组(了解树状数组点这里) 原来的树状数组在求区间和时是 sum( x, y ) = getsum( y ) - getsum( x - ...

  3. HDU 2159 FATE(二维费用背包)

    FATE Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  4. HDU 2159 FATE (二维完全背包

    FATE http://acm.hdu.edu.cn/showproblem.php?pid=2159 Problem Description 最近xhd正在玩一款叫做FATE的游戏,为了得到极品装备 ...

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

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

  6. Hdu 2888 Check Corners (二维RMQ (ST))

    题目链接: Hdu 2888 Check Corners 题目描述: 给出一个n*m的矩阵,问以(r1,c1)为左上角,(r2,c2)为右下角的子矩阵中最大的元素值是否为子矩阵的顶点? 解题思路: 二 ...

  7. HDU 4819 Mosaic (二维线段树)

    Mosaic Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 102400/102400 K (Java/Others)Total S ...

  8. HDU 2159 FATE【二维完全背包】

    题意:xhd玩游戏,还需要n个经验值升级,还留有m的忍耐度,但是他最多打s只怪,给出k个怪的经验值a[i],以及消耗的忍耐度b[i],问xhd能不能升级-- 因为有两个限定,忍耐度,和最多打s只怪(即 ...

  9. HDU 3127 WHUgirls【二维完全背包】

    题意:给出一个长为a,宽为b的布,再给出n个围巾的规格(长x,宽y,价值c),问怎样裁剪能够得到最大的价值. ----第一次做的时候不会---然后放到今天做--发现还是不会---于是又--看题解了-- ...

随机推荐

  1. hdu 3595 GG and MM 博弈论

    同时进行,必须操作这就是Every-SG的特点 同样在贾志豪的论文中有提到这种游戏:组合游戏略述——浅谈SG游戏的若干拓展及变形 其中这个游戏特点不仅有必胜和必败,而且有时间长短的博弈,对于自己必胜的 ...

  2. 00 - Oracle体系结构课程内容

    1.导论 自己把本书内容分为几个部分, (1)体系结构,(2)并发控制和事务,(3)物理存储, (4)其他. 嗯,拿到一个新的数据库,我们也要从这几个方面去认识它.   2.体系结构 3.Oracle ...

  3. 将集成spring的项目从tomcat上移植到weblogic下存在的问题

    当在weblogic下部署时, 1.需要jersey-servlet-xx.jar,jersey-core-xx.jar,jersey-server-xx.jar: 2.在web.xml中全局参数co ...

  4. lintcode 中等题:subsets II 带重复元素的子集

    题目 带重复元素的子集 给定一个可能具有重复数字的列表,返回其所有可能的子集 样例 如果 S = [1,2,2],一个可能的答案为: [ [2], [1], [1,2,2], [2,2], [1,2] ...

  5. Linux进程管理知识整理

    Linux进程管理知识整理 1.进程有哪些状态?什么是进程的可中断等待状态?进程退出后为什么要等待调度器删除其task_struct结构?进程的退出状态有哪些? TASK_RUNNING(可运行状态) ...

  6. I²C接口学习总结

    1.IIC总线概念:   a.只有两条总线线路:一条串行数据线,一条串行时钟线.   b.每个连接到总线的器件都可以使用软件根据它们的唯一的地址来识别.   c.传输数据的设备间是简单的主从关系.   ...

  7. BCB常用文件与字符串函数

    VCL库函数简介 一.BORLAND C++ BUILDER VCL的内存管理函数 1. AllocMem 在队中分配指定字节的内存块,并将分配的每一个字节初始化为 0.函数原型如下: void * ...

  8. 开源入侵检测系统OSSEC搭建之一:服务端安装

    OSSEC是一款开源的多平台的入侵检测系统,可以运行于Windows, Linux, OpenBSD/FreeBSD, 以及 MacOS等操作系统中.主要功能有日志分析.完整性检查.rootkit检测 ...

  9. Android 自定义控件-TextView

    很多时候系统自带的View满足不了设计的要求,就需要自定义View控件.自定义View首先要实现一个继承自View的类.添加类的构造方法,override父类的方法,如onDraw,(onMeasur ...

  10. MyEclipse 2013 开发WebService

    1.在Package Explorer窗口右键File新建WebService Project项目,我的名称为:TestWebService 2.WebService Framework选择JAX-W ...