二维线段树

听说二维线段树不能下传标记?

就是裸的二维线段树,由于每次高度只能增加,所以我们就可以标记永久化

每个线段树里有两个数组,mx和mark,每次修改路径上所有mx都要修改,mark是区间的精确覆盖修改

每次查询把路径上所有mark取max,然后和精确覆盖区间mx取max

为什么这样做呢?我们能不能只用一个数组?当然不行,如果我们只用mark,那么假设我们更新区间[1,4],然后查询区间[1,5],那么答案明显不对,如果我们只用mx,那么我们更新[1,1],查询[2,2],那么我们的答案被[1,1]更新了,也是不对。

#include<bits/stdc++.h>
using namespace std;
const int N = ;
int n, m, t;
struct Segment_Tree_X {
int mx[N], mark[N];
void update(int l, int r, int x, int a, int b, int tmp)
{
if(l > b || r < a) return;
mx[x] = max(mx[x], tmp);
if(l >= a && r <= b)
{
mark[x] = max(mark[x], tmp);
return;
}
int mid = (l + r) >> ;
update(l, mid, x << , a, b, tmp);
update(mid + , r, x << | , a, b, tmp);
}
int query(int l, int r, int x, int a, int b)
{
if(l > b || r < a) return ;
if(l >= a && r <= b) return mx[x];
int mid = (l + r) >> ;
return max(mark[x], max(query(l, mid, x << , a, b), query(mid + , r, x << | , a, b)));
}
};
struct Segment_Tree_Y {
Segment_Tree_X mx[N], mark[N];
void update(int l, int r, int x, int a, int b, int y_l, int y_r, int tmp)
{
if(l > b || r < a) return;
mx[x].update(, m, , y_l, y_r, tmp);
if(l >= a && r <= b)
{
mark[x].update(, m, , y_l, y_r, tmp);
return;
}
int mid = (l + r) >> ;
update(l, mid, x << , a, b, y_l, y_r, tmp);
update(mid + , r, x << | , a, b, y_l, y_r, tmp);
}
int query(int l, int r, int x, int a, int b, int y_l, int y_r)
{
if(l > b || r < a) return ;
if(l >= a && r <= b) return mx[x].query(, m, , y_l, y_r);
int mid = (l + r) >> ;
return max(mark[x].query(, m, , y_l, y_r), max(query(l, mid, x << , a, b, y_l, y_r), query(mid + , r, x << | , a, b, y_l, y_r)));
}
} T;
int main()
{
scanf("%d%d%d", &n, &m, &t);
while(t --)
{
int d, s, w, x, y, tmp;
scanf("%d%d%d%d%d", &d, &s, &w, &x, &y);
++ x;
++ y;
tmp = T.query(, n, , x, x + d - , y, y + s - );
T.update(, n, , x, x + d - , y, y + s - , w + tmp);
}
printf("%d\n", T.query(, n, , , n, , m));
return ;
}

bzoj1513的更多相关文章

  1. BZOJ1513 [POI2006]Tet-Tetris 3D 【二维线段树】

    题目链接 BZOJ1513 题解 真正地理解了一波线段树标记永久化的姿势 每个节点维护两个值\(v\)和\(tag\) \(v\)代表儿子中的最值 \(tag\)代表未下传的最值 显然节点的区间大于等 ...

  2. 【BZOJ1513】[POI2006]Tet-Tetris 3D 二维线段树

    [BZOJ1513][POI2006]Tet-Tetris 3D Description Task: Tetris 3D "Tetris" 游戏的作者决定做一个新的游戏, 一个三维 ...

  3. bzoj1513: [POI2006]Tet-Tetris 3D

    Description Task: Tetris 3D "Tetris" 游戏的作者决定做一个新的游戏, 一个三维的版本, 在里面很多立方体落在平面板,一个立方体开始落下直到碰上一 ...

  4. bzoj1513【POI2006】Tet-Tetris 3D

    1513: [POI2006]Tet-Tetris 3D Time Limit: 30 Sec  Memory Limit: 162 MB Submit: 733  Solved: 245 [Subm ...

  5. BZOJ1513:[POI2006]TET-Tetris 3D(线段树套线段树)

    Description Task: Tetris 3D "Tetris" 游戏的作者决定做一个新的游戏, 一个三维的版本, 在里面很多立方体落在平面板,一个立方体开始落下直到碰上一 ...

  6. [BZOJ1513]Tet-Tetris 3D

    get了新的标记永久化技能- 这题要求询问max和覆盖,因为是线段树套线段树,所以内外都不可以标记下传 这种标记永久化的套路是维护两个标记:$mx,all$,$mx$表示这个子树内的真最大值,$all ...

  7. [转载]hzwer的bzoj题单

    counter: 664BZOJ1601 BZOJ1003 BZOJ1002 BZOJ1192 BZOJ1303 BZOJ1270 BZOJ3039 BZOJ1191 BZOJ1059 BZOJ120 ...

  8. BZOJ刷题列表【转载于hzwer】

    沿着黄学长的步伐~~ 红色为已刷,黑色为未刷,看我多久能搞完吧... Update on 7.26 :之前咕了好久...(足见博主的flag是多么emmm......)这几天开始会抽时间刷的,每天几道 ...

随机推荐

  1. msp430项目编程14

    msp430中项目---电子测重系统 1.hx711工作原理 2.电路原理说明 3.代码(显示部分) 4.代码(功能实现) 5.项目总结 msp430项目编程 msp430入门学习

  2. Tomcat绑定具体IP

    https://blog.csdn.net/paomadeng/article/details/1826880

  3. 时间戳转换成DateTime

    select DateAdd(hour,8,Dateadd(ss,时间戳,'1970-01-01'))   --1970/01/01+时间戳(秒数)+8小时 --因GMT是中央时区,北京在东8区,相差 ...

  4. RabbitMQ最佳实践

    在使用消息机制时,我们通常需要考虑以下几个问题: 消息不能丢失 保证消息一定能投递到目的地 保证业务处理和消息发送/消费的一致性 本文以RabbitMQ为例,讨论如何解决以上问题. 消息持久化 如果希 ...

  5. C. Day at the Beach---cf559

    http://codeforces.com/problemset/problem/599/C 题目大意: 有n个城堡的高度   让你最多分成几个块   每个块排过序之后 整体是按照升序来的 分析:   ...

  6. poj——3177Redundant Paths

    poj——3177Redundant Paths      洛谷—— P2860 [USACO06JAN]冗余路径Redundant Paths Time Limit: 1000MS   Memory ...

  7. codechef Taxi Driver

    题意: 给N个点求任意两个点的“距离”总和: A,B的“距离”定义为:min(|ax-bx|,|ay-by|) (n<200000) 好题! 解析: 看着没思路 先是公式化简:让 ax=sx+s ...

  8. Android之怎样实现滑动页面切换【Fragment】

    Fragment 页面切换不能滑动 所以对于listview 能够加入的左右滑动事件 .不会有冲突比如(QQ的好友列表的删除)  Fragment 和viewpager 的差别  Viewpager ...

  9. MySQL学习系列之触发器

    触发器简介 触发器作用: 监控某种事件并触发某种动作 触发语法: CREATE TRIGGER trigger_name trigger_event ON tbl_name FOR EACH ROW ...

  10. JavaScript Prototype in Plain Language

    非常好的文章: http://javascriptissexy.com/javascript-prototype-in-plain-detailed-language/ jan. 25 2013 14 ...