HDU 1892 See you~
最裸的二维树状数组,但是因为内存太大(c[1010][1010]),好像不能运行,结果蒙着写,写了好久。。
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
#define N 1010 int c[N][N]; int lowbit(int x)
{
return x&(-x);
} void modify(int x,int y,int val)
{
for(int i=x;i<=N;i+=lowbit(i))
{
for(int j=y;j<=N;j+=lowbit(j))
{
c[i][j] += val;
}
}
} int sum(int x,int y)
{
int res = ;
for(int i=x;i>;i-=lowbit(i))
{
for(int j=y;j>;j-=lowbit(j))
{
res += c[i][j];
}
}
return res;
} int GetIt(int x1,int y1,int x2,int y2)
{
int maxx = max(x1,x2);
int maxy = max(y1,y2);
int minx = min(x1,x2);
int miny = min(y1,y2);
return sum(maxx+,maxy+)-sum(minx,maxy+)-sum(maxx+,miny)+sum(minx,miny);
} int main()
{
int t,q,i,j;
int x1,x2,y1,y2,n1;
char ss[];
int cs = ;
scanf("%d",&t);
while(t--)
{
printf("Case %d:\n",cs++);
scanf("%d",&q);
memset(c,,sizeof(c));
for(i=;i<N;i++)
{
for(j=;j<N;j++)
{
modify(i,j,);
}
}
while(q--)
{
scanf("%s",ss);
if(ss[] == 'S')
{
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
printf("%d\n",GetIt(x1,y1,x2,y2));
}
else if(ss[] == 'A')
{
scanf("%d%d%d",&x1,&y1,&n1);
modify(x1+,y1+,n1);
}
else if(ss[] == 'D')
{
scanf("%d%d%d",&x1,&y1,&n1);
int val = sum(x1+,y1+)-sum(x1,y1+)-sum(x1+,y1)+sum(x1,y1);
int Min = min(n1,val);
modify(x1+,y1+,-Min);
}
else if(ss[] == 'M')
{
scanf("%d%d%d%d%d",&x1,&y1,&x2,&y2,&n1);
int val = sum(x1+,y1+)-sum(x1,y1+)-sum(x1+,y1)+sum(x1,y1);
int Min = min(n1,val);
modify(x1+,y1+,-Min);
modify(x2+,y2+,Min);
}
}
}
return ;
}
HDU 1892 See you~的更多相关文章
- HDU 1892 See you~ (二维树状数组)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1892 See you~ Problem Description Now I am leaving h ...
- HDU 1892 See you~(二维树状数组)
See you~ Time Limit: 5000/3000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Su ...
- hdu 1892 树状数组
思路:就是一个很普通的二维树状数组,注意的是x1,y1不一定在x2,y2的左下方. #include<iostream> #include<cstring> #include& ...
- HDU 1892(书架统计 二维树状数组)
题意是在二维平面上在一些位置上进行数据的增删改查操作,使用树状数组(了解树状数组点这里) 原来的树状数组在求区间和时是 sum( x, y ) = getsum( y ) - getsum( x - ...
- HDU 1892 See you~ 【 二维树状数组 】
题意:二维的树状数组注意的有三个地方,输入进去的坐标都加1,防止lowbit(0) + 0造成死循环还有就是询问矩形面积的时候,输入进去的x1,x2,y1,y2,可能不是正对角线,要转化成正对角线 初 ...
- HDU题解索引
HDU 1000 A + B Problem I/O HDU 1001 Sum Problem 数学 HDU 1002 A + B Problem II 高精度加法 HDU 1003 Maxsu ...
- BIT 树状数组 详解 及 例题
(一)树状数组的概念 如果给定一个数组,要你求里面所有数的和,一般都会想到累加.但是当那个数组很大的时候,累加就显得太耗时了,时间复杂度为O(n),并且采用累加的方法还有一个局限,那就是,当修改掉数组 ...
- HDU 2689Sort it 树状数组 逆序对
Sort it Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Sub ...
- HDU 5643 King's Game 打表
King's Game 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5643 Description In order to remember hi ...
随机推荐
- 使用R的networkD3包画可交互的网络图
d3network包code{white-space: pre;} pre:not([class]) { background-color: white; }if (window.hljs & ...
- Javascript一些小细节
1.判断class存在 $(obj).hasClass('BTCheck_ON') $obj.attr('class')=="BTCheck_ON" 有时我们判断样式存在会写成第二 ...
- elasticsearch分词插件的安装
IK简介 IK Analyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包.从2006年12月推出1.0版开始, IKAnalyzer已经推出了4个大版本.最初,它是以开源项目Luen ...
- 学习总结——DOM
DOM(Document Object Model),即文档对象模型.DOM是针对HTML和XML文档的一个API,它描绘了一个层次化的节点树,允许开发人员添加.移除和修改页面的某一部分.在定义方面, ...
- IOS客户端Coding项目记录(四)
1:打开Xcode,然后闪退,报加载某库出现异常 如/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolc ...
- 提高eclipse使用效率(二) 提高Android开发效率的小技巧
XML文件的代码提示 adt中也有xml文件的代码提示,为了让提示来的更加猛烈,我们还要设置一下 打开eclipse - Window - Preferences,在右边的目录树中切换到XML - X ...
- IOS沙盒
可以先在程序打印沙盒路径: NSLog(@"路径%@",NSHomeDirectory()); ------------------------------------------ ...
- 【读书笔记】iOS-垃圾回收
Objective-C的垃圾回收器是一种继承性的垃圾回收器.与那些已经存在了一段时间的对象相比,新创建的对象更可能被当成垃圾.垃圾回收器定期检查变量和对象以及它们之间的指针,当发现没有任何变量指向某个 ...
- oc语言常用的字符串函数
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { ...
- FQ技术
什么是技术,就是翻_墙技术啦~ 关于GoogleFQ的网页,点击图片就能进入该网页浏览相关的FQ的设置 hosts所在文件夹: Windows 系统hosts位于 C:\Windows\System3 ...