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 ...
随机推荐
- Android小项目合集(经典教程)包含十五个Android开发应用实例
http://www.cnblogs.com/aimeng/archive/2012/03/28/2422435.html
- SQL数据库基础(一)
数据库: 结构化查询语言(Structured Query Language)简称SQL: 数据库管理系统(Database Management System)简称DBMS: 数据库管理员(Data ...
- 移位操作<<和>>,是逻辑数字上的移动(和大端小端无关)
问题描述 这几天帮同事调试DSP TMS320F28335,这鬼东西蛋疼死了.char是16bit的,16位就是他的最小内存单元.但是PC机串口发过来的有8bit的数据,然后转换就出问题. 一开始不知 ...
- 移动,企业社交(sharepoint2013)--jindahao(金大昊)
MobileIncreasingly, a major component of sharing and collaborating involves mobile access. SharePoin ...
- 在IntelliJ IDEA14中安装go语言插件
go语言的集成开发环境仍不成熟,试用了liteide,感觉很不适应,弹出菜单对程序员的干扰太大.所以就试大牌的IntelliJ IDEA,这工具本来是JAVA开发阵营的,不过它已经变为一个非常强大的支 ...
- 嵌入式调试器原理和各类调试器集锦(JLINK、STLINK、CCDEBUG)
工欲善其事,必先善其器.调试器在嵌入式开发调试中的重要性不言而喻,单步.断点和监察的效率远高于串口打印.但是,调试器对于一般开发人员往往是一个黑匣子.今天我们就来谈谈调试器的原理,顺便把自己的几类调试 ...
- IOS开发--UI进阶之iCarousel学习(待翻译)
前言:先展示这个会被多个项目用到的开源的轮播器的其中一个动画效果: 更多的效果请到github原网址查看:https://github.com/nicklockwood/iCarousel 源码也可以 ...
- animation of android (1)
android把动画的模式分为:property animation,view animation,drawable animation. view animation:给出动画的起止状态,并且通过一 ...
- ruby 删除文件
f = "app/assets/#{vm.uuid}.rrd" if FileTest::exist?(f) File.delete(f) end
- Java GC 面试问题
转自:http://icyfenix.iteye.com/blog/715301 这个帖子的背景是今晚看到je上这张贴:http://www.iteye.com/topic/715256,心血来潮写下 ...