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......)这几天开始会抽时间刷的,每天几道 ...
随机推荐
- hdu 2795线段树
#include<stdio.h> #define N 200005 int h,w,n; struct node { int x,y,max; }a]; int mmax(int e,i ...
- Java设计模式之(工厂模式)
工厂模式: 工厂模式可以分为三类: 1)简单工厂模式(Simple Factory) 2)工厂方法模式(Factory Method) 3)抽象工厂模式(Abstract Factory) 简单工厂模 ...
- P1003 铺地毯(noip 2011)
洛谷——P1003 铺地毯 题目描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯.一共有 n 张地毯,编号从 1 到n .现在将这些地毯 ...
- 原生js操作dom的方法
今天学习了原生js的dom节点的操作,就记录下来,仅供自己以后参考. 1)创建节点:除了可以使用createElement创建元素,也可以使用createTextNode创建文本节点. documen ...
- webpack体积优化篇二(GZ压缩)
这里我列举几个常用的能够用于减少包体大小的插件,我们可以根据项目需求选择性的使用: compression-webpack-plugin :该插件能够将资源文件压缩为.gz文件,并且根据客户端的需求按 ...
- 碧砚适合佳能328 4452 ICD520 4472 4450 硒鼓4700一体机墨盒4770
- 前端开发数据mock神器 -- xl_mock
1.为什么要实现数据 mock 要理解为什么要实现数据 mock,我们可以提供几个场景来解释, 1.现在的开发很多都是前后端分离的模式,前后端的工作是不同的,当我们前端界面已经完成,但是后端的接口迟迟 ...
- Meteor软件包管理
Meteor 提供数千种开发应用程序,您可以使用社区包. 添加软件包 您可以查看Meteor官方包服务器: 点击这里. 只搜索你需要的包,并在命令提示符窗口中添加它. 例如,想使用 http 包添加到 ...
- 【APUE】进程间通信之共享存储(mmap函数)
共享内存可以说是最有用的进程间通信方式,也是最快的IPC形式,因为进程可以直接读写内存,而不需要任何数据的拷贝.对于像管道和消息队列等通信方式,则需要在内核和用户空间进行四次的数据拷贝,而共享内存则只 ...
- CentOS 6.x Inotify+Rsync
CentOS 6.x Inotify+Rsync yum -y install lrzsz [root@rsync ~]# mount -t nfs 10.6.100.75:/volume1/pace ...