HDU 1892-See you(二维BIT)
题意:
最多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)的更多相关文章
- HDU 1892 See you~ (二维树状数组)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1892 See you~ Problem Description Now I am leaving h ...
- HDU 1892(书架统计 二维树状数组)
题意是在二维平面上在一些位置上进行数据的增删改查操作,使用树状数组(了解树状数组点这里) 原来的树状数组在求区间和时是 sum( x, y ) = getsum( y ) - getsum( x - ...
- HDU 2159 FATE(二维费用背包)
FATE Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- HDU 2159 FATE (二维完全背包
FATE http://acm.hdu.edu.cn/showproblem.php?pid=2159 Problem Description 最近xhd正在玩一款叫做FATE的游戏,为了得到极品装备 ...
- 【 HDU - 4456 】Crowd (二维树状数组、cdq分治)
BUPT2017 wintertraining(15) #5A HDU 4456 题意 给你一个n行n列的格子,一开始每个格子值都是0.有M个操作,p=1为第一种操作,给格子(x,y)增加z.p=2为 ...
- Hdu 2888 Check Corners (二维RMQ (ST))
题目链接: Hdu 2888 Check Corners 题目描述: 给出一个n*m的矩阵,问以(r1,c1)为左上角,(r2,c2)为右下角的子矩阵中最大的元素值是否为子矩阵的顶点? 解题思路: 二 ...
- HDU 4819 Mosaic (二维线段树)
Mosaic Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 102400/102400 K (Java/Others)Total S ...
- HDU 2159 FATE【二维完全背包】
题意:xhd玩游戏,还需要n个经验值升级,还留有m的忍耐度,但是他最多打s只怪,给出k个怪的经验值a[i],以及消耗的忍耐度b[i],问xhd能不能升级-- 因为有两个限定,忍耐度,和最多打s只怪(即 ...
- HDU 3127 WHUgirls【二维完全背包】
题意:给出一个长为a,宽为b的布,再给出n个围巾的规格(长x,宽y,价值c),问怎样裁剪能够得到最大的价值. ----第一次做的时候不会---然后放到今天做--发现还是不会---于是又--看题解了-- ...
随机推荐
- Fragment (一)
1,简介 Fragement(碎片)允许将Activity拆分成多个完全独立封装的可重用组件,每个组件有它自己的生命周期和UI布局,由此可见,Fragement依赖于Activity,它的生命周期 ...
- lintcode 中等题:Simplify Path 简化路径
题目 简化路径 给定一个文档(Unix-style)的完全路径,请进行路径简化. 样例 "/home/", => "/home" "/a/./b ...
- Compare_Connect_Letter
题目描述: 比较两个数字mn和nm(如果mn<nm则m<n, 如果nm<mn则n<m,否则n=m) 连接这两个数字 如(mnnm) //比较两个数字mn和nm(如果mn< ...
- Spring的lazy-init详解
1.Spring中lazy-init详解ApplicationContext实现的默认行为就是在启动服务器时将所有singleton bean提前进行实例化(也就是依赖注入).提前实例化意味着作为初始 ...
- 无刷新分页 jquery.pagination.js
无刷新分页 jquery.pagination.js 采用Jquery无刷新分页插件jquery.pagination.js实现无刷新分页效果 1.插件参数列表 http://www.dtan.so ...
- Filter登录验证过滤器(全局)
通过Filter来定义一个登录验证过滤器,这是就不需要在每一个JSP页面添加判断用户合法性的代码了. 以下示例中包含了5个文件,一个是登录表单LoginForm.jsp,一个是登录判断页LoginCo ...
- 深度神经网络如何看待你,论自拍What a Deep Neural Network thinks about your #selfie
Convolutional Neural Networks are great: they recognize things, places and people in your personal p ...
- Linux批量杀进程
ps -ef |grep 进程名|grep -v grep |awk '{print $2}' |xargs kill -9
- linux scp
scp是 secure copy的缩写, scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令.linux的scp命令可以在linux服务器之间复制文件和目录. scp命令的用处: scp ...
- 点(Dot)与像素(Pixel)的区别
DPI中的点(Dot)与图像分辨率中的像素(Pixel)是容易混淆的两个概念, DPI中的点可以说是硬件设备最小的显示单元, 而像素则既可是一个点,又可是多个点的集合.在扫描仪扫描图像时,扫描仪的每一 ...