bzoj1513
二维线段树
听说二维线段树不能下传标记?
就是裸的二维线段树,由于每次高度只能增加,所以我们就可以标记永久化
每个线段树里有两个数组,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的更多相关文章
- BZOJ1513 [POI2006]Tet-Tetris 3D 【二维线段树】
题目链接 BZOJ1513 题解 真正地理解了一波线段树标记永久化的姿势 每个节点维护两个值\(v\)和\(tag\) \(v\)代表儿子中的最值 \(tag\)代表未下传的最值 显然节点的区间大于等 ...
- 【BZOJ1513】[POI2006]Tet-Tetris 3D 二维线段树
[BZOJ1513][POI2006]Tet-Tetris 3D Description Task: Tetris 3D "Tetris" 游戏的作者决定做一个新的游戏, 一个三维 ...
- bzoj1513: [POI2006]Tet-Tetris 3D
Description Task: Tetris 3D "Tetris" 游戏的作者决定做一个新的游戏, 一个三维的版本, 在里面很多立方体落在平面板,一个立方体开始落下直到碰上一 ...
- bzoj1513【POI2006】Tet-Tetris 3D
1513: [POI2006]Tet-Tetris 3D Time Limit: 30 Sec Memory Limit: 162 MB Submit: 733 Solved: 245 [Subm ...
- BZOJ1513:[POI2006]TET-Tetris 3D(线段树套线段树)
Description Task: Tetris 3D "Tetris" 游戏的作者决定做一个新的游戏, 一个三维的版本, 在里面很多立方体落在平面板,一个立方体开始落下直到碰上一 ...
- [BZOJ1513]Tet-Tetris 3D
get了新的标记永久化技能- 这题要求询问max和覆盖,因为是线段树套线段树,所以内外都不可以标记下传 这种标记永久化的套路是维护两个标记:$mx,all$,$mx$表示这个子树内的真最大值,$all ...
- [转载]hzwer的bzoj题单
counter: 664BZOJ1601 BZOJ1003 BZOJ1002 BZOJ1192 BZOJ1303 BZOJ1270 BZOJ3039 BZOJ1191 BZOJ1059 BZOJ120 ...
- BZOJ刷题列表【转载于hzwer】
沿着黄学长的步伐~~ 红色为已刷,黑色为未刷,看我多久能搞完吧... Update on 7.26 :之前咕了好久...(足见博主的flag是多么emmm......)这几天开始会抽时间刷的,每天几道 ...
随机推荐
- bzoj 3207 花神的嘲讽计划Ⅰ 主席树+hash
花神的嘲讽计划Ⅰ Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3112 Solved: 1086[Submit][Status][Discuss] ...
- Vim pre-work
1.先学会touch typing盲打是一切的基础 重点在于手眼协调 如果实现不了盲打.一切高效率的Vim操作都将无从做起 2.vim的使用 2.1.hjkl的移动 推荐练习贪吃蛇 和3D平衡球 ...
- [转]genymotion Unable to load VirtualBox engine 某种解决办法
genymotion Unable to load VirtualBox engine 某种解决办法 耳闻genymotion这款模拟器很强力.于是下下来试试看.我的机器上是有virtualbox的了 ...
- Sigar 编译笔记
https://blog.csdn.net/zw3413/article/details/79482438
- 洛谷—— P3372 【模板】线段树 1
P3372 [模板]线段树 1 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.求出某区间每一个数的和 输入输出格式 输入格式: 第一行包含两个整数N.M,分别 ...
- 【APUE】孤儿进程与僵死进程
基本概念: 在unix/linux中,正常情况下,子进程是通过父进程创建的,子进程在创建新的进程.子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程 到底什么时候结束. 当一个 进程 ...
- History(历史)命令用法 15 例
如果你经常使用 Linux 命令行,那么使用 history(历史)命令可以有效地提升你的效率.本文将通过实例的方式向你介绍 history 命令的 15 个用法. 使用 HISTTIMEFORMAT ...
- VS2015 android 设计器不能可视化问题解决。
近期安装了VS2015,体验了一下android 的开发,按模板创建执行了个,试下效果非常不错.也能够可视化设计.但昨天再次打开或创建一个android程序后,设计界面直接不能显示,显示错误:(可能是 ...
- Office EXCEL 的绝对引用和相对引用如何理解
比如C1 = A1+B1,则我把C1的单元格往下拖拉的时候,C2会自动等于A2+B2,C3会自动等于A3+B3,而如果让G1 = $E$1+$F$1,则把G1单元格往下拖拉的时候,G2G3单元格都不会 ...
- jpa删除根据对象删除失败,报Removing a detached instance 错
引用:https://blog.csdn.net/zhanggnol/article/details/6307936 常用数据库表的删除办法,一般都会在DAO类中提供delete.如下例: publi ...