See you~

Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)
Total Submission(s): 4768    Accepted Submission(s): 1521

Problem Description
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.
 
Input
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.
 
Output
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.
 
Sample Input
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
 
Sample Output
Case 1:
1
3
Case 2:
1
4
 
Author
Sempr|CrazyBird|hust07p43
思路:二维树状数组;
套个二维的模板就行,注意给的两个点的大小关系;
  1 #include<stdio.h>
2 #include<algorithm>
3 #include<iostream>
4 #include<stdlib.h>
5 #include<queue>
6 #include<string.h>
7 #include<map>
8 #include<vector>
9 #include<queue>
10 using namespace std;
11 typedef long long LL;
12 int ma[1005][1005];
13 int bit[1005][1005];
14 int cit[1005][1005];
15 int lowbit(int x);
16 void add(int x,int y,int c,int v);
17 int ask(int x,int y);
18 int main(void)
19 {
20 int n;
21 scanf("%d",&n);
22 int __ca = 0;
23 int i,j;
24 for(i = 1; i <= 1001; i++)
25 {
26 for(j = 1; j <= 1001; j++)
27 {
28 ma[i][j] = 1;
29 add(i,j,1,0);
30 }
31 }
32 while(n--)
33 {
34 memset(bit,0,sizeof(bit));
35 int m;
36 for(i = 0; i <= 1001; i++)
37 {
38 for(j = 0; j <= 1001; j++)
39 {
40 bit[i][j] = cit[i][j];
41 }
42 }
43 for(i = 0; i <= 1001; i++)
44 {
45 for(j = 0; j <= 1001; j++)
46 {
47 ma[i][j] = 1;
48 }
49 }
50 char ans[10];
51 scanf("%d",&m);
52 printf("Case %d:\n",++__ca);
53 while(m--)
54 {
55 scanf("%s",ans);
56 int x,y,x1,y1;
57 if(ans[0]=='S')
58 {
59 scanf("%d %d %d %d",&x,&y,&x1,&y1);
60 if(x > x1)
61 swap(x,x1),swap(y,y1);
62 if(y > y1)
63 {
64 swap(y,y1);
65 }
66 x++;
67 y++;
68 x1++;
69 y1++;
70 int sum = ask(x1,y1);
71 sum -= ask(x-1,y1);
72 sum -= ask(x1,y-1);
73 sum += ask(x-1,y-1);
74 printf("%d\n",sum);
75 }
76 else if(ans[0] == 'A')
77 {
78 int c;
79 scanf("%d %d %d",&x,&y,&c);
80 x++;
81 y++;
82 ma[x][y] += c;
83 add(x,y,c,1);
84 }
85 else if(ans[0] == 'M')
86 {
87 int c;
88 scanf("%d %d %d %d %d",&x,&y,&x1,&y1,&c);
89 x++;
90 y++;
91 x1++;
92 y1++;
93 if(ma[x][y] < c)
94 c = ma[x][y];
95 ma[x][y] -= c;
96 ma[x1][y1]+=c;
97 add(x,y,-c,1);
98 add(x1,y1,c,1);
99 }
100 else
101 {
102 int c;
103 scanf("%d %d %d",&x,&y,&c);
104 x++;
105 y++;
106 if(ma[x][y] < c)
107 c = ma[x][y];
108 ma[x][y] -= c;
109 add(x,y,-c,1);
110 }
111 }
112 }
113 return 0;
114 }
115 int lowbit(int x)
116 {
117 return x&(-x);
118 }
119 void add(int x,int y,int c,int v)
120 {
121 int i,j;
122 for(i = x; i <= 1001; i += lowbit(i))
123 {
124 for(j = y; j <= 1001; j += lowbit(j))
125 {
126 if(v)
127 bit[i][j] += c;
128 else cit[i][j]+=c;
129 }
130 }
131 }
132 int ask(int x,int y)
133 {
134 int i,j;
135 int sum = 0;
136 for(i = x; i > 0; i -= lowbit(i))
137 {
138 for(j = y; j > 0; j -= lowbit(j))
139 {
140 sum += bit[i][j];
141 }
142 }
143 return sum;
144 }

See you~(hdu1892)的更多相关文章

  1. Angular2入门系列教程7-HTTP(一)-使用Angular2自带的http进行网络请求

    上一篇:Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数 感觉这篇不是很好写,因为涉及到网络请求,如果采用真实的网络请求,这个例子大家拿到手估计还要自己写一个web ...

  2. Angular2学习笔记(1)

    Angular2学习笔记(1) 1. 写在前面 之前基于Electron写过一个Markdown编辑器.就其功能而言,主要功能已经实现,一些小的不影响使用的功能由于时间关系还没有完成:但就代码而言,之 ...

  3. ASP.NET Core 之 Identity 入门(一)

    前言 在 ASP.NET Core 中,仍然沿用了 ASP.NET里面的 Identity 组件库,负责对用户的身份进行认证,总体来说的话,没有MVC 5 里面那么复杂,因为在MVC 5里面引入了OW ...

  4. ABP入门系列(1)——学习Abp框架之实操演练

    作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...

  5. Online Judge(OJ)搭建(第一版)

    搭建 OJ 需要的知识(重要性排序): Java SE(Basic Knowledge, String, FileWriter, JavaCompiler, URLClassLoader, Secur ...

  6. 如何一步一步用DDD设计一个电商网站(九)—— 小心陷入值对象持久化的坑

    阅读目录 前言 场景1的思考 场景2的思考 避坑方式 实践 结语 一.前言 在上一篇中(如何一步一步用DDD设计一个电商网站(八)—— 会员价的集成),有一行注释的代码: public interfa ...

  7. 如何一步一步用DDD设计一个电商网站(八)—— 会员价的集成

    阅读目录 前言 建模 实现 结语 一.前言 前面几篇已经实现了一个基本的购买+售价计算的过程,这次再让售价丰满一些,增加一个会员价的概念.会员价在现在的主流电商中,是一个不大常见的模式,其带来的问题是 ...

  8. 【.net 深呼吸】细说CodeDom(5):类型成员

    前文中,老周已经厚着脸皮介绍了类型的声明,类型里面包含的自然就是类型成员了,故,顺着这个思路,今天咱们就了解一下如何向类型添加成员. 咱们都知道,常见的类型成员,比如字段.属性.方法.事件.表示代码成 ...

  9. 【.net 深呼吸】细说CodeDom(4):类型定义

    上一篇文章中说了命名空间,你猜猜接下来该说啥.是了,命名空间下面就是类型,知道了如何生成命名空间的定义代码,之后就该学会如何声明类型了. CLR的类型通常有这么几种:类.接口.结构.枚举.委托.是这么 ...

随机推荐

  1. linux中chage命令的基本使用

    在Linux中chage命令常用于设置系统用户的账户属性 Usage: chage [options] LOGIN Options: -d, --lastday LAST_DAY set date o ...

  2. Java 数据类型转化

    目录 Java类型转化 基本数据类型自动类型转换 自动类型提升 强制类型转换 - 自动类型提升的逆运算 int与long int类型与String类型 int类型转换成String类型 方法1:+ 拼 ...

  3. linux RPM/YUM包管理

    linux RPM/YUM包管理 目录 linux RPM/YUM包管理 RPM RPM包管理 查询rpm包 卸载rpm包 安装rpm包 YUM 查看yum服务器是否有需要安装的软件 下载安装指定的y ...

  4. A Child's History of England.6

    It was a British Prince named Vortigern who took this resolution, and who made a treaty of friendshi ...

  5. day35前端基础之BOM和DOM

    day35前端基础之BOM和DOM BOM操作 简介 BOM(Browser Object Model)是指浏览器对象模型,它使 JavaScript 有能力与浏览器进行"对话". ...

  6. Oracle参数文件—pfile与spfile

    oracle的参数文件:pfile和spfile 1.pfile和spfile       Oracle中的参数文件是一个包含一系列参数以及参数对应值的操作系统文件.它们是在数据库实例启动时候加载的, ...

  7. 记录一下使用MySQL的left join时,遇到的坑

    # 现象 left join在我们使用mysql查询的过程中可谓非常常见,比如博客里一篇文章有多少条评论.商城里一个货物有多少评论.一条评论有多少个赞等等.但是由于对join.on.where等关键字 ...

  8. JDBC(3):PreparedStatement对象介绍

    一,PreparedStatement介绍 PreperedStatement是Statement的子类,它的实例对象可以通过Connection.preparedStatement()方法获得,相对 ...

  9. 解决 nginx: [error] invalid PID number "" in "/usr/local/nginx/logs/nginx.pid"

    使用/usr/local/nginx/sbin/nginx -s reload 重新读取配置文件出错 [root@localhost nginx]/usr/local/nginx/sbin/nginx ...

  10. 【Linux】【Shell】【Basic】数组

    1. 数组:         变量:存储单个元素的内存空间:         数组:存储多个元素的连续的内存空间:             数组名:整个数组只有一个名字:             数组 ...