See you~(二维树状数组)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1892
See you~
Time Limit: 5000/3000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)
Total Submission(s): 4178 Accepted Submission(s): 1317
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.
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.
For each "S" query, just print out the total number of books in that area.
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
1
3
Case 2:
1
4
#include<cstdio>
#include <iostream>
#include<cstring>
#include<algorithm> using namespace std;
#define N 1010
inline int lowbit(int i)
{
return i&(-i);
} int mp[N][N];
inline int add(int x , int y , int a)
{
for(int i = x ; i < N ;i+=lowbit(i))
for(int j = y ; j < N ;j+=lowbit(j))
mp[i][j]+=a;
}
inline int sum (int x , int y)
{
int ans = ;
for(int i = x ; i> ; i-=lowbit(i))
for(int j = y ; j> ; j-=lowbit(j))
ans+=mp[i][j];
return ans;
}
inline int Sum(int x1,int y1,int x2,int y2)
{
int ans = sum(x2,y2)-sum(x1-,y2)-sum(x2,y1-)+sum(x1-,y1-);
return ans;
}//写成内敛函数会更快一点
inline int in_int()//输入外挂读入一个数字
{
char ch;
int res = ;
while(ch = getchar()) if(ch >= '' && ch <= '') break;
while(ch >= '' && ch <= '')
{
res = res*+ch-'';
ch = getchar();
}
return res;
} inline char in_ch()//输入外挂读入一个字符
{
char res = getchar();
while(res < 'A' || res > 'Z') res = getchar();
return res;
} void out(int x)//递归的输出外挂其实并不会快多少
{
if(x > ) out(x/);
putchar(x%+'');
}
int iniAry[N][N]; int main()
{
for(int i = ; i < N; i++)
for(int j = ; j < N; j++)
iniAry[i][j] = lowbit(i)*lowbit(j); //因为每次的初始化都是一样的,所以可以只算一次,然后memcpy()给mp;
int T;
T = in_int();
for(int cas = ; cas <= T; cas++)
{
printf("Case %d:\n", cas);
memcpy(mp, iniAry, sizeof(iniAry));
int n;
n = in_int();
char ml;
for(int i = ;i < n; i++)
{
ml = in_ch();
if(ml=='S')
{
int x1, x2,y1,y2;
x1 = in_int();
y1 = in_int();
x2 = in_int();
y2 = in_int();
x1++, y1++, x2++, y2++;
if(x1 > x2) swap(x1, x2);
if(y1 > y2) swap(y1, y2);
int sum = Sum(x1,y1,x2,y2);
out(sum);
puts("");
}
else if(ml == 'A')
{
int x , y, a;
x = in_int();
y = in_int();
x++, y++;
a = *in_int();
add(x,y,a);
}
else if(ml == 'D')
{
int x, y, m;
x = in_int();
y = in_int();
x++, y++;
m = in_int();
int tm = Sum(x, y, x, y);
if(tm < m) m = tm;
if(m > ) add(x, y, -m);
}
else if(ml =='M')
{
int x1 , x2, y1, y2, m;
x1 = in_int();
y1 = in_int();
x2 = in_int();
y2 = in_int();
x1++, y1++, x2++, y2++;
m = in_int();
int tm = Sum(x1, y1, x1, y1);
if(tm < m) m = tm;
if(m > )
{
add(x1,y1,-m);
add(x2,y2,m);
}
}
}
}
return ;
}
See you~(二维树状数组)的更多相关文章
- 二维树状数组 BZOJ 1452 [JSOI2009]Count
题目链接 裸二维树状数组 #include <bits/stdc++.h> const int N = 305; struct BIT_2D { int c[105][N][N], n, ...
- HDU1559 最大子矩阵 (二维树状数组)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1559 最大子矩阵 Time Limit: 30000/10000 MS (Java/Others) ...
- POJMatrix(二维树状数组)
Matrix Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 22058 Accepted: 8219 Descripti ...
- poj 1195:Mobile phones(二维树状数组,矩阵求和)
Mobile phones Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 14489 Accepted: 6735 De ...
- Codeforces Round #198 (Div. 1) D. Iahub and Xors 二维树状数组*
D. Iahub and Xors Iahub does not like background stories, so he'll tell you exactly what this prob ...
- POJ 2155 Matrix(二维树状数组+区间更新单点求和)
题意:给你一个n*n的全0矩阵,每次有两个操作: C x1 y1 x2 y2:将(x1,y1)到(x2,y2)的矩阵全部值求反 Q x y:求出(x,y)位置的值 树状数组标准是求单点更新区间求和,但 ...
- [poj2155]Matrix(二维树状数组)
Matrix Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 25004 Accepted: 9261 Descripti ...
- POJ 2155 Matrix (二维树状数组)
Matrix Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 17224 Accepted: 6460 Descripti ...
- [POJ2155]Matrix(二维树状数组)
题目:http://poj.org/problem?id=2155 中文题意: 给你一个初始全部为0的n*n矩阵,有如下操作 1.C x1 y1 x2 y2 把矩形(x1,y1,x2,y2)上的数全部 ...
- MooFest_二维树状数组
Description Every year, Farmer John's N (1 <= N <= 20,000) cows attend "MooFest",a s ...
随机推荐
- 来腾讯云开发者实验室 学习.NET
腾讯云开发者实验室为开发者提供了一个零门槛的在线实验平台,开发者实验室提供的能力: 零门槛扫码即可免费领取实验机器,支持使用自有机器参与,实验完成后支持保留实验成果: 在线 WEB IDE 支持 sh ...
- 缓存(Cache)
l如果每次进入页面的时候都查询数据库生成页面内容的话,如果访问量非常大,则网站性能会非常差.而如果只有第一次访问的时候才查询数据库生成页面内容,以后都直接输出内容,则能提高系统性能.这样无论有多少人访 ...
- 手动编译protobuf3的C++源码
Windows下编译 官方文档 第三方文档 准备工具 Visual Studio 2013 CMake https://cmake.org/ Git https://git-scm.com/ 需要注意 ...
- TCP/IP协议栈(三)——linux 向下的报文处理
应用程序连接服务器时,目的地套接字地址(端口号和IP地址)以参数形式传递给系统调用connect(tcp_v4_connect()).下面逐步介绍初始化该连接 检查内核路由表,查找给定目的地IP地址路 ...
- swift内存管理中的引用计数
在swift中,每一个对象都有生命周期,当生命周期结束会调用deinit()函数进行释放内存空间. 观察这一段代码: class Person{ var name: String var pet: P ...
- springmvc注入类 NoUniqueBeanDefinitionException: No qualifying bean of type [] is defined: expected single错误
在springmvc中注入服务时用@Service 当有两个实现类时都标明@Service后则会出现异常: nested exception is org.springframework.beans. ...
- angular4.0快速import依赖路径
快捷键:ALT + ENTER 直接import对应的依赖路径
- 基于div表单模拟右对齐
基于div表单模拟右对齐 --------------------------------------------------------- ----------------------------- ...
- 教你用.Net来玩微信跳一跳
目前开发的所有代码都已经上传到了GitHub.欢迎大家来Star https://github.com/GiantLiu/AutoJump 目前程序分为“全自动版本”和“半自动版本” 全自动版本 We ...
- Appium Mac 命令行安装
试过很多方法都失败,打算用命令行方式安装. 准备工作: 从 https://github.com/appium/appium下载appium版本的源码(.tar) 详见github_Appium1.6 ...