hud 1892 (二维树状数组)
来源:互联网 发布:php开发技术 编辑:程序博客网 时间:2024/05/29 12:41
这道题原理一点都不难,但是硬是磨了我一个上午,醉了。
主要是输出格式弄错了,还有数组的界限问题。
最重要的是输入的值最好都加一,以免for循环(二重)的时候 i == 0,就停下来了,下面的循环可能还没结束
#include<cstdio>#include<iostream>#include<algorithm>#include<cstring>using namespace std;int map[1005][1005];int lowbit(int t) { return t & (-t);}void add(int x,int y,int v) { for(int i = x;i < 1002;i += lowbit(i)) //这里设置1002就过了,开1001就wa,醉了 for(int j = y;j < 1002;j += lowbit(j)) //开两个for来循环。 map[i][j] += v;}long long getsum(int x,int y) { long long sum = 0; for(int i = x;i > 0;i -= lowbit(i)) for(int j = y;j > 0;j -= lowbit(j)) { sum += map[i][j]; } return sum;}int main() { int t,n; scanf("%d",&t); for(int ll = 1;ll <= t;ll++) { printf("Case %d:\n",ll); scanf("%d",&n); memset(map,0,sizeof(map)); for(int i = 1;i <= 1001;i++) for(int j = 1;j <= 1001;j++) add(i,j,1); while(n--) { char str[20]; scanf("%s",str); if(str[0] == 'S') { int X1,Y1,X2,Y2,x1,y1,x2,y2; scanf("%d%d%d%d",&X1,&Y1,&X2,&Y2); x1 = min(X1,X2); x2 = max(X1,X2); y1 = min(Y1,Y2); y2 = max(Y1,Y2); //这里要确认大的面积减去小的面积 printf("%I64d\n",getsum(x2+1,y2+1) - getsum(x2+1,y1) - getsum(x1,y2+1) + getsum(x1,y1)); //二维按照面积来减,可以想一下,最后就是这样 } else if(str[0] == 'A') { int x,y,v; scanf("%d%d%d",&x,&y,&v); add(x+1,y+1,v); } else if(str[0] == 'D') { int x,y,v; scanf("%d%d%d",&x,&y,&v); int tt = getsum(x+1,y+1) - getsum(x,y+1) - getsum(x+1,y) + getsum(x,y); v = min(v,tt); add(x+1,y+1,-v); } else { int x1,y1,x2,y2,v; scanf("%d%d%d%d%d",&x1,&y1,&x2,&y2,&v); int tt = getsum(x1+1,y1+1) - getsum(x1,y1+1) - getsum(x1+1,y1) + getsum(x1,y1); v = min(v,tt); add(x1+1,y1+1,-v); add(x2+1,y2+1,v); } } } return 0;}
哎,浪费好多时间,继续继续~~
0 0
- hud 1892 (二维树状数组)
- hud 4358(树状数组+离散化)
- 树状数组(二维)
- hdu 1892(二维树状数组模板)
- 二维树状数组 hdu 1892
- 【二维树状数组】HDU 1892
- HDU 1892 二维树状数组
- HDU 1892 二维树状数组
- HDU 1892 (二维树状数组)
- HDU 1892 二维树状数组
- hdu 1892 二维树状数组
- HDU 1892 二维树状数组
- hdu 1892 二维树状数组
- hdu 1892 树状数组,二维
- HDU 1892(树状数组二维)
- 二维树状数组模板(1892)
- poj1195(二维树状数组)
- poj2155(二维树状数组)
- PHP 学习笔记(四):高级教程:Cookies,Sessions,邮件,错误处理,异常处理,过滤器
- 橙色——三色配色篇
- 分治策略之最大子数组
- OC中的类方法与实例方法
- 简单实现二叉树
- hud 1892 (二维树状数组)
- 剑指offer--面试题10:二进制中1的个数
- 练习搭建spring+springmvc+mybatis实现java web登陆
- Android快速实现通知栏提醒功能
- Qt5--Qt模块简介
- 近百种Android项目源码
- socket 通讯检测客户端非正常断线。
- JAVA学习34_java类加载全过程
- java Pattern和Matcher——用于匹配和查找字符串中的内容