P3437 [POI2006]TET-Tetris 3D
题目
做法
一眼就是二维线段树,仔细想想,赋值操作怎么办??\(lazy\)标记放在一维,下一次又来放个标记二维就冲突了
正解:永久化标记
怎么办不会啊??看了十分钟代码才懂:
区间修改:经过的路径在最大值维护里修改,到了修改的区间把这个懒惰标记放在这里就不动了,不下传(在这个标记里面改)
然后查询的时候到的路径都要查询一遍标记
讲一下一维修改的时候不能写成赋值操作:\(tag[now]=max(tag[now],val);\)
因为我们最大值和懒惰标记都在这里改,对于最大值那里面这维得写成赋值,想想就懂了吧?
也就是说我们其实要写两个区间修改的,为了减少码量这样写
My complete code
#include<cstdio>
#include<cstring>
#include<string>
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
typedef int LL;
const LL maxn=1009;
inline LL Read(){
LL x(0),f(1);char c=getchar();
while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
while(c>='0'&&c<='9')x=(x<<3)+(x<<1)+c-'0',c=getchar();
return x*f;
}
LL n,m,q;
struct node1{
LL tag[maxn<<2],mx[maxn<<2];
LL Query(LL now,LL l,LL r,LL lt,LL rt){
if(lt<=l&&rt>=r) return mx[now];
LL ret(tag[now]),mid(l+r>>1);
if(lt<=mid) ret=max(ret,Query(now<<1,l,mid,lt,rt));
if(rt>mid) ret=max(ret,Query(now<<1|1,mid+1,r,lt,rt));
return ret;
}
void Change(LL now,LL l,LL r,LL lt,LL rt,LL val){
mx[now]=max(mx[now],val);
if(lt<=l&&rt>=r){tag[now]=max(tag[now],val); return;}
LL mid(l+r>>1);
if(lt<=mid) Change(now<<1,l,mid,lt,rt,val);
if(rt>mid) Change(now<<1|1,mid+1,r,lt,rt,val);
}
};
struct node2{
node1 tag[maxn<<2],mx[maxn<<2];
LL Query(LL now,LL l,LL r,LL lt,LL rt,LL lh,LL rh){
if(lt<=l&&rt>=r) return mx[now].Query(1,1,m,lh,rh);
LL ret(tag[now].Query(1,1,m,lh,rh)),mid(l+r>>1);
if(lt<=mid) ret=max(ret,Query(now<<1,l,mid,lt,rt,lh,rh));
if(rt>mid) ret=max(ret,Query(now<<1|1,mid+1,r,lt,rt,lh,rh));
return ret;
}
void Change(LL now,LL l,LL r,LL lt,LL rt,LL lh,LL rh,LL val){
mx[now].Change(1,1,m,lh,rh,val);
if(lt<=l&&rt>=r){tag[now].Change(1,1,m,lh,rh,val);return;}
LL mid(l+r>>1);
if(lt<=mid) Change(now<<1,l,mid,lt,rt,lh,rh,val);
if(rt>mid) Change(now<<1|1,mid+1,r,lt,rt,lh,rh,val);
}
}T;
int main(){
n=Read(),m=Read(),q=Read();
while(q--){
LL d(Read()),s(Read()),val(Read()),x(Read()+1),y(Read()+1);
val+=T.Query(1,1,n,x,x+d-1,y,y+s-1);
T.Change(1,1,n,x,x+d-1,y,y+s-1,val);
}
printf("%d\n",T.Query(1,1,n,1,n,1,m));
return 0;
}
P3437 [POI2006]TET-Tetris 3D的更多相关文章
- 洛谷 P3437 [POI2006]TET-Tetris 3D 解题报告
P3437 [POI2006]TET-Tetris 3D 题目描述 The authors of the game "Tetris" have decided to make a ...
- bzoj1513【POI2006】Tet-Tetris 3D
1513: [POI2006]Tet-Tetris 3D Time Limit: 30 Sec Memory Limit: 162 MB Submit: 733 Solved: 245 [Subm ...
- 洛谷P3437 [POI2006]TET-Tetris 3D(二维线段树 标记永久化)
题意 题目链接 Sol 二维线段树空间复杂度是多少啊qwqqq 为啥这题全网空间都是\(n^2\)还有人硬要说是\(nlog^2n\)呀.. 对于这题来说,因为有修改操作,我们需要在外层线段树上也打标 ...
- 洛谷 P3437 [POI2006]TET-Tetris 3D
二维线段树区间更新啊 树套树的外层树,如果是线段树的话一般似乎不能打标记?(毕竟标记不好下传) 然而起码对于这题是可以的...对于外层线段树,每个节点放两个内层线段树dat和setv,分别是得到的值和 ...
- bzoj 1513 [POI2006]Tet-Tetris 3D(二维线段树)
1513: [POI2006]Tet-Tetris 3D Time Limit: 30 Sec Memory Limit: 162 MBSubmit: 540 Solved: 175[Submit ...
- 【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(线段树套线段树)
Description Task: Tetris 3D "Tetris" 游戏的作者决定做一个新的游戏, 一个三维的版本, 在里面很多立方体落在平面板,一个立方体开始落下直到碰上一 ...
- NOIp2018停课刷题记录
Preface 老叶说了高中停课但是初中不停的消息后我就为争取民主献出一份力量 其实就是和老师申请了下让我们HW的三个人听课结果真停了 那么还是珍惜这次机会好好提升下自己吧不然就\(AFO\)了 Li ...
随机推荐
- 解决Bootstrap 试用手机端 布满全屏
@media (max-width: 767px) { body{ margin: 0; padding: 0; } } @media (max-width: 970px) { body{ margi ...
- [浪风分享]App必死 Web永生 看Web的前世今生 必会卷土重来
当我们回顾技术的演变历史时,我们也应该关注技术演变的背后逻辑. 几年前,美国的<连线>杂志发表了“Web已死,Internet永生”的文章,由于作者之一是长尾理论的提出者克里斯.安德森(C ...
- Docker入门与应用系列(一)介绍与部署
Docker介绍 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制, ...
- Sql server还原失败(数据库正在使用,无法获得对数据库的独占访问权)
Sql server还原失败(数据库正在使用,无法获得对数据库的独占访问权) 问题分析:数据库还原的时候还有其他进程连在上面,导致无法获得独占造成的. 解决方案: 一.切断连接进程 .查询要还原的数据 ...
- 在Xcode中使用Git进行源码版本控制(转)
http://www.cocoachina.com/ios/20140524/8536.html
- Log4j 使用
源博客 http://www.cnblogs.com/alipayhutu/archive/2012/06/21/2558249.html#3159794 [1]从零开始 a). 新建Java Pro ...
- Android开发:《Gradle Recipes for Android》阅读笔记(翻译)2.2——将Eclipse开发的项目导入到AndroidStudio
问题: 你想要将一个Eclipse ADT项目导入到Android Studio中. 解决方案: Android Studio提供了一个导入向导,可以重写已有的项目. 详细: 在Android Stu ...
- Uva12663
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=110383#problem/C 题目大意:有一些不同高度的桥,会涨几次水,水流初 ...
- CSU-1632 Repeated Substrings[后缀数组求重复出现的子串数目]
评测地址:https://cn.vjudge.net/problem/CSU-1632 Description 求字符串中所有出现至少2次的子串个数 Input 第一行为一整数T(T<=10)表 ...
- delphi 中配置文件的使用(*.ini)和TIniFile 用法
一.配置文件 .ini 文件是基于文本类型的格式文件,用于存储程序初始化和配置数据. .ini文件是有段(Sections)和键(key)组成的,每个文件可以有 n个段(每个段有方括号括起来),每个段 ...