实现功能——对于一个N×M的方格,1:输入一个区域,将此区域全部值作加法;2:输入一个区域,求此区域全部值的和

其实和一维线段树同理,只是不知道为什么速度比想象的慢那么多,求解释。。。@acphile

(还有代码略恶心,求原谅。。。^_^)

 const tvp=;
var
i,j,k,l,m,n,a1,a2,a3,a4,a5:longint;
a,b:array[..tvp] of longint;
c1,c2:char;
function max(x,y:longint):longint;inline;
begin
if x>y then max:=x else max:=y;
end;
function min(x,y:longint):longint;inline;
begin
if x<y then min:=x else min:=y;
end;
function op(z,x1,y1,x2,y2,lx,ly,rx,ry,nu,d:longint):longint;inline;
var
a1,a2,a3,a4,a5:longint;
begin
if (lx>rx) or (ly>ry) then exit();
if (x1=lx) and (y1=ly) and (x2=rx) and (y2=ry) then
begin
b[z]:=b[z]+nu;
exit(nu*(rx-lx+)*(ry-ly+));
end;
a2:=op(z*-,x1,y1,(x1+x2) div ,(y1+y2) div ,lx,ly,min(rx,(x1+x2) div ),min(ry,(y1+y2) div ),nu,d);
a3:=op(z*-,x1,(y1+y2) div +,(x1+x2) div ,y2,lx,max(ly,(y1+y2) div +),min(rx,(x1+x2) div ),ry,nu,d);
a4:=op(z*,(x1+x2) div +,y1,x2,(y1+y2) div ,max(lx,(x1+x2) div +),ly,rx,min(ry,(y1+y2) div ),nu,d);
a5:=op(z*+,(x1+x2) div +,(y1+y2) div +,x2,y2,max(lx,(x1+x2) div +),max(ly,(y1+y2) div +),rx,ry,nu,d);
a[z]:=a[z]+a2+a3+a4+a5;
exit(a2+a3+a4+a5);
end;
function cal(z,x1,y1,x2,y2,lx,ly,rx,ry,d:longint):longint;inline;
var a1,a2,a3,a4,a5:longint;
begin
if (lx>rx) or (ly>ry) then exit();
d:=d+b[z];
if (x1=lx) and (y1=ly) and (x2=rx) and (y2=ry) then exit(a[z]+d*(rx-lx+)*(ry-ly+));
a2:=cal(z*-,x1,y1,(x1+x2) div ,(y1+y2) div ,lx,ly,min(rx,(x1+x2) div ),min(ry,(y1+y2) div ),d);
a3:=cal(z*-,x1,(y1+y2) div +,(x1+x2) div ,y2,lx,max(ly,(y1+y2) div +),min(rx,(x1+x2) div ),ry,d);
a4:=cal(z*,(x1+x2) div +,y1,x2,(y1+y2) div ,max(lx,(x1+x2) div +),ly,rx,min(ry,(y1+y2) div ),d);
a5:=cal(z*+,(x1+x2) div +,(y1+y2) div +,x2,y2,max(lx,(x1+x2) div +),max(ly,(y1+y2) div +),rx,ry,d);
exit(a2+a3+a4+a5);
end;
begin
readln(c1,n,m);
fillchar(a,sizeof(a),);
fillchar(b,sizeof(b),);
while not(eof) do
begin
read(c1,a1,a2,a3,a4);
case c1 of
'L':begin
readln(a5);
op(,,,n,m,a1,a2,a3,a4,a5,);
end;
'k':begin
readln;
writeln(cal(,,,n,m,a1,a2,a3,a4,));
end;
end;
end;
end.

算法模板——线段树6(二维线段树:区域加法+区域求和)(求助phile)的更多相关文章

  1. 【BZOJ4785】[Zjoi2017]树状数组 树套树(二维线段树)

    [BZOJ4785][Zjoi2017]树状数组 Description 漆黑的晚上,九条可怜躺在床上辗转反侧.难以入眠的她想起了若干年前她的一次悲惨的OI 比赛经历.那是一道基础的树状数组题.给出一 ...

  2. 算法模板——计算几何2(二维凸包——Andrew算法)

    实现功能:求出二维平面内一对散点的凸包(详见Codevs 1298) 很神奇的算法——先将各个点按坐标排序,然后像我们所知的那样一路左转,求出半边的凸包,然后反过来求另一半的凸包 我以前正是因为总抱着 ...

  3. poj 2155 matrix 二维线段树 线段树套线段树

    题意 一个$n*n$矩阵,初始全为0,每次翻转一个子矩阵,然后单点查找 题解 任意一种能维护二维平面的数据结构都可以 我这里写的是二维线段树,因为四分树的写法复杂度可能会退化,因此考虑用树套树实现二维 ...

  4. hdu 4819 二维线段树模板

    /* HDU 4819 Mosaic 题意:查询某个矩形内的最大最小值, 修改矩形内某点的值为该矩形(Mi+MA)/2; 二维线段树模板: 区间最值,单点更新. */ #include<bits ...

  5. HDU1832 二维线段树求最值(模板)

    Luck and Love Time Limit: 10000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...

  6. hdu1823(二维线段树模板题)

    hdu1823 题意 单点更新,求二维区间最值. 分析 二维线段树模板题. 二维线段树实际上就是树套树,即每个结点都要再建一颗线段树,维护对应的信息. 一般一维线段树是切割某一可变区间直到满足所要查询 ...

  7. Luck and Love(二维线段树)

    Luck and Love Time Limit: 10000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...

  8. bzoj4785:[ZJOI2017]树状数组:二维线段树

    分析: "如果你对树状数组比较熟悉,不难发现可怜求的是后缀和" 设数列为\(A\),那么可怜求的就是\(A_{l-1}\)到\(A_{r-1}\)的和(即\(l-1\)的后缀减\( ...

  9. HDU 4819 Mosaic (二维线段树&区间最值)题解

    思路: 二维线段树模板题,马克一下,以后当模板用 代码: #include<cstdio> #include<cmath> #include<cstring> #i ...

  10. [BZOJ4785][ZJOI2017]树状数组(概率+二维线段树)

    4785: [Zjoi2017]树状数组 Time Limit: 40 Sec  Memory Limit: 512 MBSubmit: 297  Solved: 195[Submit][Status ...

随机推荐

  1. gunicorn 简介

      gunicorn是一个python Wsgi http server,只支持在Unix系统上运行,来源于Ruby的unicorn项目.Gunicorn使用prefork master-worker ...

  2. Nancy简单实战之NancyMusicStore(三):完善商品信息与管理

    前言 上一篇,我们做了不少准备,并且还把我们NancyFx音乐商城的首页打造好了.这一篇主要是完善我们在首页的商品浏览问题和添加对商品的管理. 下面开始正题: 商品详情 首先是查看单个商品的详情: 先 ...

  3. windows环境下使用git客户端、github和tortoisegit管理项目代码

    一.为什么 为什么不用svn? svn是一个优秀的代码和版本管理工具,使用svn只需要搭建好svn中央仓库,配置本地svn客户端即可,自从google code关闭服务之后,互联网上已经没有非常好的公 ...

  4. Hybrid容器设计之第三方网站

    平台化容器API释放 接上文:(阅读本文前,建议阅读前三篇文章先) 浅谈Hybrid技术的设计与实现 浅谈Hybrid技术的设计与实现第二弹 浅谈Hybrid技术的设计与实现第三弹——落地篇 之前设计 ...

  5. ubuntu 笔记一

    注:ubuntu14.04 64位 1.刚安装的ubuntu无法在终端使用su 原因:root没有默认密码,需要手动设定. 解决方法:以具有sudo权限的用户登录 给root用户设置密码:打开一个te ...

  6. 【java设计模式】之 抽象工厂(Abstract Factory)模式

    1. 女娲的失误 上一节学习了工厂模式,女娲运用了该模式成功创建了三个人种,可是问题来了,她发现没有性别--这失误也忒大了点吧--竟然没有性别,那岂不是--无奈,只好抹掉重来了,于是所有人都被消灭掉了 ...

  7. CardboardSDK-iOS 源码简单分析

    该项目地址: 地址 克隆地址为 https://github.com/rsanchezsaez/CardboardSDK-iOS.git 目前如果想在iOS设备上实现双目VR的功能,Google 已经 ...

  8. iOS 容器控制器 (Container View Controller)

    iOS 容器控制器 (Container View Controller) 一个控制器包含其他一个或多个控制器,前者为容器控制器 (Container View Controller),后者为子控制器 ...

  9. HDU 2080 夹角有多大II

    夹角有多大II Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

  10. java_ 集合

    集合类说明及区别Collection├List│├LinkedList│├ArrayList│└Vector│ └Stack└SetMap├Hashtable├HashMap└WeakHashMap ...