Description

在这个“打鼹鼠”的游戏中,鼹鼠会不时地从洞中钻出来,不过不会从洞口钻进去(鼹鼠真胆大……)。洞口都在
一个大小为n(n<=1024)的正方形中。这个正方形在一个平面直角坐标系中,左下角为(0,0),右上角为(n-1,n-1)。
洞口所在的位置都是整点,就是横纵坐标都为整数的点。而SuperBrother也不时地会想知道某一个范围的鼹鼠总数
。这就是你的任务。

Input

每个输入文件有多行。
第一行,一个数n,表示鼹鼠的范围。
以后每一行开头都有一个数m,表示不同的操作:
m=1,那么后面跟着3个数x,y,k(0<=x,y<n),表示在点(x,y)处新出现了k只鼹鼠;
m=2,那么后面跟着4个数x1,y1,x2,y2(0<=x1<=x2<n,0<=y1<=y2<n),表示询问矩形(x1,y1)-(x2,y2)内的鼹鼠数量;
m=3,表示老师来了,不能玩了。保证这个数会在输入的最后一行。
询问数不会超过10000,鼹鼠数不会超过maxlongint。

Output

对于每个m=2,输出一行数,这行数只有一个数,即所询问的区域内鼹鼠的个数。

Sample Input

4
1 2 2 5
2 0 0 2 3
3

Sample Output

5

乍一看这个题目,是不是很像线段树操作,欸,这个二维平面怎么线段树啊

让我们来想一想,一颗线段树维护x轴,另一颗维护y轴,

那线段树岂不是要嵌套,那外层的线段树的每一个节点都代表1个x坐标,那么每个节点都得保存一颗线段树,那颗内层的线段树就保存y坐标;

这种数据结构就叫做二维线段树

修改操作就稍微麻烦一点了

要先在外层线段树中查找x坐标,再到当前x坐标保存的y坐标的线段树中去找,进行修改

提示:外层线段树是不能进行修改的!!!

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int a,b,c,d,n,m,ans;
void read(int &x) {char ch; bool ok;for(ok=0,ch=getchar(); !isdigit(ch); ch=getchar()) if(ch=='-') ok=1;for(x=0; isdigit(ch); x=x*10+ch-'0',ch=getchar()); if(ok) x=-x;
}
struct oo
{int a,b;struct o{int a,b,num;}y[3025];void build(int now,int l,int r){y[now].a=l,y[now].b=r;if(l==r)return ;build(now<<1,l,l+r>>1);build(now<<1|1,(l+r>>1)+1,r);}void change(int now,int r,int num){y[now].num+=num;if(y[now].a==y[now].b)return ;int mid=y[now].a+y[now].b>>1;if(r<=mid)change(now<<1,r,num);else change(now<<1|1,r,num);}void get(int now,int b1,int b2){if(b1<=y[now].a&&b2>=y[now].b)ans+=y[now].num;else{int mid=y[now].a+y[now].b>>1;if(b1<=mid)get(now<<1,b1,b2);if(b2>mid)get(now<<1|1,b1,b2);}
}
}x[3025];
void build(int now,int l,int r)
{x[now].a=l,x[now].b=r;x[now].build(1,0,n);if(l==r)return ;build(now<<1,l,l+r>>1);build(now<<1|1,(l+r>>1)+1,r);
}
void change(int now,int l,int r,int num)
{x[now].change(1,r,num);if(x[now].a==x[now].b)return ;int mid=x[now].a+x[now].b>>1;if(l<=mid)change(now<<1,l,r,num);else change(now<<1|1,l,r,num);
}
void get(int now,int a1,int a2,int b1,int b2)
{if(a1<=x[now].a&&a2>=x[now].b)x[now].get(1,b1,b2);else{int mid=x[now].a+x[now].b>>1;if(a1<=mid)get(now<<1,a1,a2,b1,b2);if(a2>mid)get(now<<1|1,a1,a2,b1,b2);}
}
int main()
{read(n);build(1,0,n);while(1){   read(m);if(m==3)return 0;if(m==1){read(a),read(b),read(c);change(1,a,b,c);}if(m==2){read(a),read(b),read(c);read(d);get(1,a,c,b,d);printf("%d\n",ans);ans=0;}}
}

祝大家早日AC!!!

Tyvj1474 打鼹鼠相关推荐

  1. [Tyvj1474]打鼹鼠

    Description 在这个"打鼹鼠"的游戏中,鼹鼠会不时地从洞中钻出来,不过不会从洞口钻进去(鼹鼠真胆大--).洞口都在一个大小为n(n<=1024)的正方形中.这个正方 ...

  2. vijos 1512 SuperBrother打鼹鼠

    背景 SuperBrother在机房里闲着没事干(再对比一下他的NOIP,真是讽刺啊......),于是便无聊地开始玩"打鼹鼠"...... 描述 在这个"打鼹鼠&quo ...

  3. P2285 [HNOI2004]打鼹鼠

    P2285 [HNOI2004]打鼹鼠 题目描述 鼹鼠是一种很喜欢挖洞的动物,但每过一定的时间,它还是喜欢把头探出到地面上来透透气的.根据这个特点阿牛编写了一个打鼹鼠的游戏:在一个n*n的网格中,在某 ...

  4. BZOJ 1207 打鼹鼠

    Description 鼹鼠是一种很喜欢挖洞的动物,但每过一定的时间,它还是喜欢把头探出到地面上来透透气的.根据这个特点阿Q编写了一个打鼹鼠的游戏:在一个n*n的网格中,在某些时刻鼹鼠会在某一个网格探 ...

  5. 多态部分作业 3..创建Rodent(啮齿动物):Mnouse(老鼠),Gerbil(鼹鼠),Hamster(大颊鼠)

    package Day11; /*3..创建Rodent(啮齿动物):Mnouse(老鼠),Gerbil(鼹鼠),Hamster(大颊鼠),等等这样一个的继承层次结构.在基类中,提供对所有的Roden ...

  6. 【HNOI2004】【codevs1256】【BZOJ1207】打鼹鼠,小小DP

    打鼹鼠 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description 鼹鼠是一种很喜欢挖洞的动物,但每过一定的时间,它还是喜欢把头探出 ...

  7. 游戏王计算机兽,游戏王星杯卡——迅猛龙,再生圣经,入侵蠕虫,鼹鼠,幽世之血樱...

    地卡--骏足之迅猛龙(3星/阶) 骏足之迅猛龙即为跑得快的意思,也有是瞬速的可能性在里面. 恐龙族/效果: 这张卡可以通常召唤也可以通过特殊召唤来使用.通过特殊召唤使用的场合,对方可以在对方的墓地选1 ...

  8. DP || HYSBZ 1207 打鼹鼠

    n*n的网格,有m个鼹鼠,t时间会有一只鼹鼠出现在(x,y)点处,如果机器人也在这个点就可以打到鼹鼠 机器人初始位置任意,每秒可以移动一格,问最多打到多少鼹鼠 *解法:f[i]表示前i只鼹鼠打了多少个 ...

  9. VIJOS 1512SuperBrother打鼹鼠(二维BIT)

    呵呵.. 二维树状数组,第二维和第一维基本一样. --------------------------------------------------------------------------- ...

最新文章

  1. 64位win7安装IIS7时不能浏览asp的问题
  2. java性能分析 linux,linux 系统性能分析
  3. linux centos 没有service命令 安装方法
  4. windows docker 卸载_安装Docker(Docker Toolbox)与Splash库
  5. ios网络学习------8 xml格式数据的请求处理 用代码块封装
  6. Android --- Android layout属性应有尽有
  7. 查看MySQL服务端版本
  8. 两校合并!新部属大学,来了!
  9. 如果你不喜欢Windows 11开始菜单,还可以用注册表换回Windows 10样式
  10. JAVA中的线程安全与非线程安全,java面试题,java高级笔试题
  11. junit5和junit4_JUnit声明异常– JUnit 5和JUnit 4
  12. C语言合法常量123L,C语言综合习(最终版).doc
  13. oracle设置自增字段,oracle序列
  14. 计算机用户导入导出,使用csvde批量添加,导入,导出用户
  15. 【转】PIC单片机入门笔记(新手学PIC必看)——基于PIC16F886
  16. KVM环境下vCPU绑定到物理CPU
  17. 互联网晚报 | 11月3日 星期三 | 头条西瓜等业务并入抖音;菜鸟联合天猫上亿元补贴快递员;雅虎宣布正式退出中国市场...
  18. ES6 里的symbol
  19. 周大福、周六福、周生生等区分
  20. 优盘里文件夹变成html,U盘里的文件全部变成了快捷方式,怎么破?

热门文章

  1. 测试容器网络带宽,限制容器对内存,对CPU的使用
  2. 3d图形消隐c语言,一种3D图形背面消隐算法及其硬件加速实现
  3. 基于JAVAHTML5运河古城网站计算机毕业设计源码+数据库+lw文档+系统+部署
  4. Python检测文章抄袭,谈谈去重算法原理
  5. 前端上传大文件怎么处理
  6. iOS开发-单元测试
  7. Odbgscript Updated to 1.65.4 by sunbeam
  8. 华为网络工程师项目模拟
  9. 黑马程序员-我的入学笔记1-关于C#.net基础
  10. ChatGPT:微软人工智能Office和电邮即将登场...