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 ...
随机推荐
- C指针类型小结
要理解复杂的指针类型其实很简单,一个类型里会出现很多运算符,它们也像普通表达式一样,有优先级. 原则: 从变量名开始,根据运算符优先级结合,一步一步分析. 下面让我们先从简单的类型开始慢慢分析吧: i ...
- .net 连接Redis
Redis安装 公司业务需要,弄了个类似于消息队列的东西,由客户端一直轮询取得信息.之前一直是走表的,但是效率以对表的使用都太过频繁,想试着用一下Redis,看看效率怎么样. 首先是安装Redis,这 ...
- yii rule
https://blog.csdn.net/ljfrocky/article/details/46373691 http://www.yiichina.com/tutorial/997 http:// ...
- BAPI、badi 和 LSMW 的相同点和不同点及具体操作
一开始badi.BAPI.LSMW关系极其混乱,好像都是传输数据, just transfer data from SAP system to non-SAP system or transfer d ...
- 在其他app里预览文档
本文转载至 http://www.cocoachina.com/newbie/basic/2013/0515/6212.html iOS中的沙盒可以让平台更加的安全,这也是沙盒给用户带来的最主要好处. ...
- tomcat访问日志分析
常使用web服务器的朋友大都了解,一般的web server有两部分日志: 一是运行中的日志,它主要记录运行的一些信息,尤其是一些异常错误日志信息 二是访问日志信息,它记录的访问的时间,IP,访问的资 ...
- 《从零开始学Swift》学习笔记(Day 46)——下标重写
原创文章,欢迎转载.转载请注明:关东升的博客 下标是一种特殊属性.子类属性重写是重写属性的getter和setter访问器,对下标的重写也是重写下标的getter和setter访问器. 下面看一个示例 ...
- Xmind 8 update 4 破解教程(破解补丁+破解步骤+下载地址)
一.原始教程 原教程很详细,直接参考: http://www.voidcn.com/article/p-yyybmcqq-bnz.html 若无法访问请点击:http://df1551e3.wiz03 ...
- zookeeper 命令行使用
先用简易的客户端链接上 默认链接的就是本机上面的zkserver 我一上来help 下.没办法 ,用的少,先喊一声救命 ,看看有没有人救我! [zk: localhost:2181(CONNECTED ...
- centos安装lumen
刚开始安装报错,我用的是php7,先安装zip,uzip扩展 yum install zip unzip php7.0-zip 然后通过 Composer 的 create-project 命令来安装 ...