题目

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的更多相关文章

  1. 洛谷 P3437 [POI2006]TET-Tetris 3D 解题报告

    P3437 [POI2006]TET-Tetris 3D 题目描述 The authors of the game "Tetris" have decided to make a ...

  2. bzoj1513【POI2006】Tet-Tetris 3D

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

  3. 洛谷P3437 [POI2006]TET-Tetris 3D(二维线段树 标记永久化)

    题意 题目链接 Sol 二维线段树空间复杂度是多少啊qwqqq 为啥这题全网空间都是\(n^2\)还有人硬要说是\(nlog^2n\)呀.. 对于这题来说,因为有修改操作,我们需要在外层线段树上也打标 ...

  4. 洛谷 P3437 [POI2006]TET-Tetris 3D

    二维线段树区间更新啊 树套树的外层树,如果是线段树的话一般似乎不能打标记?(毕竟标记不好下传) 然而起码对于这题是可以的...对于外层线段树,每个节点放两个内层线段树dat和setv,分别是得到的值和 ...

  5. bzoj 1513 [POI2006]Tet-Tetris 3D(二维线段树)

    1513: [POI2006]Tet-Tetris 3D Time Limit: 30 Sec  Memory Limit: 162 MBSubmit: 540  Solved: 175[Submit ...

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

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

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

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

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

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

  9. NOIp2018停课刷题记录

    Preface 老叶说了高中停课但是初中不停的消息后我就为争取民主献出一份力量 其实就是和老师申请了下让我们HW的三个人听课结果真停了 那么还是珍惜这次机会好好提升下自己吧不然就\(AFO\)了 Li ...

随机推荐

  1. Node Embedding

    1.Kipf, Thomas N., and Max Welling. "Semi-supervised classification with graph convolutional ne ...

  2. Java连接Sql Server 2008的简单数据库应用

    1.从微软官网下载JDBC驱动包 sqljdbc_4.0.2206.100_chs.exe,双击解压文件到指定目录,我的指定目录是: C:\Program Files\Microsoft JDBC D ...

  3. 用于ARM上的FFT与IFFT源代码-C语言

    /********************************************************************************* 程序名称:快速傅里叶变换(FFT) ...

  4. Expression<Func<T, bool>>与Func<T, bool>的区别

    转自:http://www.cnblogs.com/wow-xc/articles/4952233.html Func<TObject, bool>是委托(delegate) Expres ...

  5. Python 对Twitter tweet的元素 (Word, Screen Name, Hash Tag)的频率分析

    CODE: #!/usr/bin/python # -*- coding: utf-8 -*- ''' Created on 2014-7-2 @author: guaguastd @name: tw ...

  6. POJ 1861 &amp; ZOJ 1542 Network(最小生成树之Krusal)

    题目链接: PKU:http://poj.org/problem?id=1861 ZJU:http://acm.zju.edu.cn/onlinejudge/showProblem.do?proble ...

  7. Javascript中的函数中的this值

    看下面这段代码会在控制台上输出什么内容? <script> var url="fang.com"; var obj={ url:"soufun.com&quo ...

  8. Apple 企业开发者账号申请记录

    1.账号分类 Apple开发者账号分三种,个人,公司,还有企业.个人和公司都称为标准账号. 还有一种是教育机构的账号. 记录:申请日期2013年4月26,看申请周期多长. 个人和公司的就不说了,现在只 ...

  9. py 与 pyc 文件

    本文要说明的问题 pyc 文件是什么 pyc 文件的作用 py 与 pyc 文件冲突 pyc 文件是什么 当 py 文件加载后,py 文件被二进制编码成 pyc 文件.py 文件的修改时间被记录到 p ...

  10. api文档的书写

    写文档写要与写代码一样,增加复用. 比如 model 说明就只需要一个,api中含有哪些字段,就在api说明中增加到那些 models 的链接. 使用 sophinx 如何生成目录 .. toctre ...