算法模板——线段树6(二维线段树:区域加法+区域求和)(求助phile)
实现功能——对于一个N×M的方格,1:输入一个区域,将此区域全部值作加法;2:输入一个区域,求此区域全部值的和
其实和一维线段树同理,只是不知道为什么速度比想象的慢那么多,求解释。。。@acphile
(还有代码略恶心,求原谅。。。^_^)
1 const tvp=8000000; 2 var 3 i,j,k,l,m,n,a1,a2,a3,a4,a5:longint; 4 a,b:array[0..tvp] of longint; 5 c1,c2:char; 6 function max(x,y:longint):longint;inline; 7 begin 8 if x>y then max:=x else max:=y; 9 end; 10 function min(x,y:longint):longint;inline; 11 begin 12 if x<y then min:=x else min:=y; 13 end; 14 function op(z,x1,y1,x2,y2,lx,ly,rx,ry,nu,d:longint):longint;inline; 15 var 16 a1,a2,a3,a4,a5:longint; 17 begin 18 if (lx>rx) or (ly>ry) then exit(0); 19 if (x1=lx) and (y1=ly) and (x2=rx) and (y2=ry) then 20 begin 21 b[z]:=b[z]+nu; 22 exit(nu*(rx-lx+1)*(ry-ly+1)); 23 end; 24 a2:=op(z*4-2,x1,y1,(x1+x2) div 2,(y1+y2) div 2,lx,ly,min(rx,(x1+x2) div 2),min(ry,(y1+y2) div 2),nu,d); 25 a3:=op(z*4-1,x1,(y1+y2) div 2+1,(x1+x2) div 2,y2,lx,max(ly,(y1+y2) div 2+1),min(rx,(x1+x2) div 2),ry,nu,d); 26 a4:=op(z*4,(x1+x2) div 2+1,y1,x2,(y1+y2) div 2,max(lx,(x1+x2) div 2+1),ly,rx,min(ry,(y1+y2) div 2),nu,d); 27 a5:=op(z*4+1,(x1+x2) div 2+1,(y1+y2) div 2+1,x2,y2,max(lx,(x1+x2) div 2+1),max(ly,(y1+y2) div 2+1),rx,ry,nu,d); 28 a[z]:=a[z]+a2+a3+a4+a5; 29 exit(a2+a3+a4+a5); 30 end; 31 function cal(z,x1,y1,x2,y2,lx,ly,rx,ry,d:longint):longint;inline; 32 var a1,a2,a3,a4,a5:longint; 33 begin 34 if (lx>rx) or (ly>ry) then exit(0); 35 d:=d+b[z]; 36 if (x1=lx) and (y1=ly) and (x2=rx) and (y2=ry) then exit(a[z]+d*(rx-lx+1)*(ry-ly+1)); 37 a2:=cal(z*4-2,x1,y1,(x1+x2) div 2,(y1+y2) div 2,lx,ly,min(rx,(x1+x2) div 2),min(ry,(y1+y2) div 2),d); 38 a3:=cal(z*4-1,x1,(y1+y2) div 2+1,(x1+x2) div 2,y2,lx,max(ly,(y1+y2) div 2+1),min(rx,(x1+x2) div 2),ry,d); 39 a4:=cal(z*4,(x1+x2) div 2+1,y1,x2,(y1+y2) div 2,max(lx,(x1+x2) div 2+1),ly,rx,min(ry,(y1+y2) div 2),d); 40 a5:=cal(z*4+1,(x1+x2) div 2+1,(y1+y2) div 2+1,x2,y2,max(lx,(x1+x2) div 2+1),max(ly,(y1+y2) div 2+1),rx,ry,d); 41 exit(a2+a3+a4+a5); 42 end; 43 begin 44 readln(c1,n,m); 45 fillchar(a,sizeof(a),0); 46 fillchar(b,sizeof(b),0); 47 while not(eof) do 48 begin 49 read(c1,a1,a2,a3,a4); 50 case c1 of 51 'L':begin 52 readln(a5); 53 op(1,1,1,n,m,a1,a2,a3,a4,a5,0); 54 end; 55 'k':begin 56 readln; 57 writeln(cal(1,1,1,n,m,a1,a2,a3,a4,0)); 58 end; 59 end; 60 end; 61 end.
转载于:https://www.cnblogs.com/HansBug/p/4237745.html
算法模板——线段树6(二维线段树:区域加法+区域求和)(求助phile)相关推荐
- 模板:二维线段树(线段树套线段树)
文章目录 问题 解析 单点修改 询问 完整代码 标记永久化 代码 所谓二维线段树,就是有两个维度的线段树 (逃) 问题 给出一个矩形 要求支持以下操作: 1.询问一个子矩形的最值 2.修改某一个单点的 ...
- POJ2155二维线段树
题意: 给一个n*n的01矩阵,然后有两种操作(m次)C x1 y1 x2 y2是把这个小矩形内所有数字异或一遍,Q x y 是询问当前这个点的值是多少?n<=1000 m<=5 ...
- 10.25T2 二维线段树
Description 为了准备校庆庆典,学校招募了一些学生组成了一个方阵,准备在庆典上演出. 这个方阵是一个n*m的矩形,第i行第j列有一名学生,他有一个能力值Ai,j. 校长会定期检查一个p*q的 ...
- BZOJ2877 NOI2012魔幻棋盘(二维线段树)
显然一个序列的gcd=gcd(其差分序列的gcd,序列中第一个数).于是一维情况直接线段树维护差分序列即可. 容易想到将该做法拓展到二维.于是考虑维护二维差分,查询时对差分矩阵求矩形的gcd,再对矩形 ...
- poj1195 Mobile phones 二维线段树入门
二维线段树就是树套树,线段树套线段树... #include<iostream> #include<cstdio> #include<cstring> #inclu ...
- POJ-2155 Matrix 二维线段树 | 树状数组
题目链接:http://poj.org/problem?id=2155 比较典型的二维线段树题目,直接永久更新即可,在询问的时候,要询问每个x区间的子树,复杂度O(log(n)^2). 也可以用树状数 ...
- [POJ2155] Matrix(二维线段树,树套树)
题目链接:http://poj.org/problem?id=2155 题意:给一个01矩阵,两个操作,翻转:子矩阵里每一个数都由0变1,1变0. 查询:查询某一点是0还是1. 一直以为二维线段树就是 ...
- HDU1823(二维线段树)
题目:Luck and Love 题意:当操作符为'I'时,表示有一个MM报名,后面接着一个整数,H表示身高,两个浮点数,A表示活泼度,L表示缘分值. (100<=H<=200, 0.0& ...
- 【NOI2019】弹跳【二维线段树】【dijkstra】
题意:一个w×hw\times hw×h的二维平面上有nnn个城市,有mmm个弹跳装置,第iii个可以花费tit_iti的时间从城市pip_ipi跳到矩形x∈[l,r],y∈[u,d]x\in [ ...
- BZOJ.4553.[HEOI2016TJOI2016]序列(DP 树状数组套线段树/二维线段树(MLE) 动态开点)
题目链接:BZOJ 洛谷 \(O(n^2)\)DP很好写,对于当前的i从之前满足条件的j中选一个最大值,\(dp[i]=d[j]+1\) for(int j=1; j<i; ++j)if(a[j ...
最新文章
- Ubuntu中的vi模式中的按上下左右键变成ABCD解决方法
- SAP Fiori Elements 在本地测试模式下如何修改 List Report 里字段标签和图标
- 数据库大咖解读“新基建”,墨天轮四重好礼相送!
- 技术实践丨手把手教你使用MQTT方式对接华为IoT平台
- 推行法定数字货币,现有支付宝/微信等支付系统,会否被数字货币支付系统替代并超越?
- 如何更改rhevm中admin的密码
- 对称加密、非对称加密、RSA、消息摘要、数字签名、数字证书与 HTTPS 简介
- apache + phpStudy 配置vue history模式
- 人工智能产生式系统动物识别实验python
- java题目:有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数
- 如何修改pdf文件内容
- pyqt+pyqtgraph+lka(界面制作)
- 回波损耗、反射系数、电压驻波比以及S参数的物理意义
- C#编程-47:选择类控件复习笔记
- 华丽而实用的Java图表应用
- Android 12 适配攻略
- 行人重识别 (Re-ID)数据集介绍
- GAGE USB信号采集卡
- 安卓-QQ-课程设计
- Maven配置阿里云HTTPS镜像地址
热门文章
- 面试前,不要这么准备了,简直愚蠢到极点
- 使用requests通过代码实现接口测试自动化
- win7误删计算机,Win7系统下文件数据被误删了怎么办
- awk bc命令 linux_Linux 的 awk 命令教程手册,建议收藏!
- python字符串_(Python基础教程之七)Python字符串操作
- 计算机文件系统小结,文件系统总结
- 颜色和心理年龄测试软件,超准的色彩心理学:选8个颜色,就可以测出你的心理年龄...
- Alec jacobson thesis analysis
- 徐州工程学院计算机报名,2019年3月江苏徐州工程学院计算机等级考试报名时间...
- 大厂面试常问的机器学习,计算机视觉怎么学?详细指南来了!