描述

Now I am leaving hust acm. In the past two and half years, I learned so many knowledge about Algorithm and Programming, and I met so many good friends. I want to say sorry to Mr, Yin, I must leave now ~~>.<~~. I am very sorry, we could not advanced to the World Finals last year.
When coming into our training room, a lot of books are in my eyes. And
every time the books are moving from one place to another one. Now give
you the position of the books at the early of the day. And the moving
information of the books the day, your work is to tell me how many books
are stayed in some rectangles.
To make the problem easier, we divide the room into different grids and a
book can only stayed in one grid. The length and the width of the room
are less than 1000. I can move one book from one position to another
position, take away one book from a position or bring in one book and
put it on one position.

输入

In
the first line of the input file there is an Integer T(1<=T<=10),
which means the number of test cases in the input file. Then N test
cases are followed.
For each test case, in the first line there is an Integer
Q(1<Q<=100,000), means the queries of the case. Then followed by Q
queries.
There are 4 kind of queries, sum, add, delete and move.
For example:
S x1 y1 x2 y2 means you should tell me the total books of the rectangle
used (x1,y1)-(x2,y2) as the diagonal, including the two points.
A x1 y1 n1 means I put n1 books on the position (x1,y1)
D x1 y1 n1 means I move away n1 books on the position (x1,y1), if less than n1 books at that position, move away all of them.
M x1 y1 x2 y2 n1 means you move n1 books from (x1,y1) to (x2,y2), if less than n1 books at that position, move away all of them.
Make sure that at first, there is one book on every grid and 0<=x1,y1,x2,y2<=1000,1<=n1<=100.

输出

At the beginning of each case, output "Case X:" where X is the index of the test case, then followed by the "S" queries.
For each "S" query, just print out the total number of books in that area.

样例输入

2
3
S 1 1 1 1
A 1 1 2
S 1 1 1 1
3
S 1 1 1 1
A 1 1 2
S 1 1 1 2

样例输出

Case 1:
1
3
Case 2:
1
4

题意

1000*1000的矩阵上每个格点放了1本书

Q个操作

1.查询[X1,Y1]-[X2,Y2]总共放了几本书

2.在[X1,Y1]增加n1本书

3.在[X1,Y1]移除n1本书,若不够则全移走

4.把[X1,Y1]上的n1本书移到[X2,Y2]上,若不够则全移到[X2,Y2]

题解

二维树状数组单点修改,区间查询

1.区间查询分成4块,([1,1]-[X1,Y1])+([1,1]-[X2,X2])-([1,1]-[X2+1,Y1])-([1,1]-[X1,Y2+1])

2.直接单点更新

3.区间查询单点,这里X2=X1,Y2=Y1,查出来的与n1比个小即为需要移走的数

4.同三

这里操作1,并没有严格[X1,Y1]<[X2,Y2],所以需要交换

代码

 #include<bits/stdc++.h>
using namespace std; const int N=;
const int n=; struct BIT2{
int sum[N][N];
void init()
{
memset(sum,,sizeof sum);
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
update(i,j,);
}
int lowbit(int x){return x&(-x);}
int update(int x,int y,int w)
{
x++,y++;
for(int i=x;i<=n;i+=lowbit(i))
for(int j=y;j<=n;j+=lowbit(j))
sum[i][j]+=w;
}
int query(int x,int y)
{
x++,y++;
int ans=;
for(int i=x;i>;i-=lowbit(i))
for(int j=y;j>;j-=lowbit(j))
ans+=sum[i][j];
return ans;
}
}T;
int main()
{
int t,q,x1,y1,x2,y2,n1,o=;
char op[];
scanf("%d",&t);
while(t--)
{
printf("Case %d:\n",o++);
T.init();
scanf("%d",&q);
for(int i=;i<q;i++)
{
scanf("%s",op);
if(op[]=='S')
{
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
if(x1>x2)swap(x1,x2);
if(y1>y2)swap(y1,y2);
int ans=T.query(x2,y2)+T.query(x1-,y1-)-T.query(x2,y1-)-T.query(x1-,y2);
printf("%d\n",ans);
}
if(op[]=='A')
{
scanf("%d%d%d",&x1,&y1,&n1);
T.update(x1,y1,n1);
}
if(op[]=='D')
{
scanf("%d%d%d",&x1,&y1,&n1);
int ans=T.query(x1,y1)+T.query(x1-,y1-)-T.query(x1,y1-)-T.query(x1-,y1);
T.update(x1,y1,-min(n1,ans));
}
if(op[]=='M')
{
scanf("%d%d%d%d%d",&x1,&y1,&x2,&y2,&n1);
int ans=T.query(x1,y1)+T.query(x1-,y1-)-T.query(x1,y1-)-T.query(x1-,y1);
T.update(x1,y1,-min(n1,ans));
T.update(x2,y2,min(n1,ans));
}
}
}
return ;
}

TZOJ 2725 See you~(二维树状数组单点更新区间查询)的更多相关文章

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

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

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

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

  3. hdu2642二维树状数组单点更新+区间查询

    http://acm.hdu.edu.cn/showproblem.php?pid=2642 题目大意:一个星空,二维的.上面有1000*1000的格点,每个格点上有星星在闪烁.一开始时星星全部暗淡着 ...

  4. 【2018年全国多校算法寒假训练营练习比赛(第五场)-E】情人节的电灯泡(二维树状数组单点更新+区间查询)

    试题链接:https://www.nowcoder.com/acm/contest/77/E 题目描述 情人节到了,小芳和小明手牵手,打算过一个完美的情人节,但是小刚偏偏也来了,当了一个明晃晃的电灯泡 ...

  5. SPOJ - MATSUM 二维树状数组单点更新

    忘记了单点更新时要在树状数组中减去原值..wa了一发 /* 矩形求和,单点更改 */ #include<iostream> #include<cstring> #include ...

  6. hdu2642二维树状数组单点更新

    碰到这种题一定要注意坐标是不是有序的,也要注意坐标是不是有0的,有的话需要+1处理 #include<bits/stdc++.h> using namespace std; #define ...

  7. 【bzoj5173】[Jsoi2014]矩形并 扫描线+二维树状数组区间修改区间查询

    题目描述 JYY有N个平面坐标系中的矩形.每一个矩形的底边都平行于X轴,侧边平行于Y轴.第i个矩形的左下角坐标为(Xi,Yi),底边长为Ai,侧边长为Bi.现在JYY打算从这N个矩形中,随机选出两个不 ...

  8. 【bzoj3132】上帝造题的七分钟 二维树状数组区间修改区间查询

    题目描述 “第一分钟,X说,要有矩阵,于是便有了一个里面写满了0的n×m矩阵. 第二分钟,L说,要能修改,于是便有了将左上角为(a,b),右下角为(c,d)的一个矩形区域内的全部数字加上一个值的操作. ...

  9. 牛客网 暑期ACM多校训练营(第二场)J.farm-STL(vector)+二维树状数组区间更新、单点查询 or 大暴力?

    开心.jpg J.farm 先解释一下题意,题意就是一个n*m的矩形区域,每个点代表一个植物,然后不同的植物对应不同的适合的肥料k,如果植物被撒上不适合的肥料就会死掉.然后题目将每个点适合的肥料种类( ...

随机推荐

  1. Xshell 公钥登入服务器

    1:生成公钥 此时有test.pub文件 2:linux CentOS 7 配置 2.1 test.pub 存入/root/test.pub目录下面 2.2 确保authorized_keys文件内容 ...

  2. fb发布打包外部资源

    将资源放在src文件夹下面即可 然后在打包那就会看到资源,勾上即可

  3. 集合,ArrayList

    用集合代替数组: Console.Write("请输入人数:"); int renshu = int.Parse(Console.ReadLine()); ArrayList ch ...

  4. (已解决)java.lang.NoSuchMethodException: com.kevenwu.pojo.User.<init>()

    搭建ssm框架时报了如下错误,原因是: mybatis在初始化bean的时候需要无参构造器, 如果写了有参构造器,将会把无参构造器覆盖掉,加上一个无参构造器就可以了

  5. XML中的变量传值

    在action的java类中定义变量之后,在XML中获取该变量进行对应传值:: 在指定方法中获取XML配置文件的变量传值::

  6. aaad

    I remember the wonderful moment you appeared before me, like a fleeting vision, like a genius of pur ...

  7. 尚硅谷springboot学习4-helloworld探究

    1.POM文件 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spr ...

  8. jQuery图片延迟加载插件:jquery.lazyload

    ----------------------------------------------------------------------------------------------- clas ...

  9. Hibernate 再接触 关系映射 一对一双向外键关联

    凡是双向关联必设mapped by  由对方主导 wifi.java package com.bjsxt.hibernate; import javax.persistence.Entity; imp ...

  10. eclipse 连接数据库记录

    两篇很好的文章介绍给大家: Eclipse使用JDBC方式连接SQLServer2016 通过Driver与DriverManager连接数据库 --------------------------- ...