题目

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. 【spring boot】在spring boot下使用多线程

    使用场景: 方法处理到某一步,需要将信息交给另一个线程去处理!! =================================================================== ...

  2. rem的使用方法

    首先写入一下代码 <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" cont ...

  3. 通知:spark meetup 第六次会议在北京举行

    通知: Spark北京Meetup第六次活动(­机器学习专题) 将于北京时间3月21日 下午14:00-18:00 在微软亚太研发集团总部大厦1号楼举行,主题包括: Julien Pierre  Pr ...

  4. Spring4 MVC表单验证

    在这篇文章中,我们将学习如何使用Spring表单标签, 表单验证使用 JSR303 的验证注解,hibernate-validators,提供了使用MessageSource和访问静态资源(如CSS, ...

  5. SlidingMenu官方实例分析1——ExampleListActivity

    1.SlidingMenuDemo下载: 由AndroidManifest.xml能看出项目是从ExampleListActivity启动的: ExampleListActivity继承了Sherlo ...

  6. iOS 集成阿里百川最新版(3.1.1.96) 实现淘宝授权登录以及调用淘宝客户端商品详情页

      公司最近要做第三方登录,由于是做导购项目,必不可少的有淘宝的授权登录.本来就是一个授权登录,没什么大不了的.但淘宝的无线开放业务——阿里百川更新的最新版本3.1.1.96,开发文档不是不详细,是很 ...

  7. drawableRightset 和 CompoundDrawables

    android:drawableRight="@drawable/check_down" 在代码中的用法是: Drawable drawable = getResources(). ...

  8. fzu2181(点的双连通分量+求奇环)

    求出每个点双连通分量,如果在一个点双连通分量中有奇环,则这个分量每个点都在一个奇环中.  关键是要知道怎么求点双连通分量以及点双连通的性质. fzu2181 http://acm.fzu.edu.cn ...

  9. 【BZOJ3043】IncDec Sequence 乱搞

    [BZOJ3043]IncDec Sequence Description 给定一个长度为n的数列{a1,a2...an},每次可以选择一个区间[l,r],使这个区间内的数都加一或者都减一.问至少需要 ...

  10. 《从零开始学Swift》学习笔记(Day2)——使用Web网站编写Swift代码

    Swift 2.0学习笔记——使用Web网站编写Swift代码 原创文章,欢迎转载.转载请注明:关东升的博客 Swift程序不能在Windows其他平台编译和运行,有人提供了一个网站swiftstub ...