题目

二维线段树板子题啊

但是惊讶的发现我不会打标记

毕竟内层是线段树不能\(pushup\)也不能\(pushdown\)

于是考虑一下标记永久化

其实非常显然\(mx_i\)表示区间最大值,\(tag_i\)表示标记

我们修改的时候一路修改最大值,最后打标记

查询的时候一路查\(tag_i\),最后访问一下\(mx_i\)

非常好理解,因为打上标记之后就表示这棵树内部都受这个标记的影响

代码

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#define LL long long
#define re register
inline int read() {
char c=getchar();int x=0;while(c<'0'||c>'9') c=getchar();
while(c>='0'&&c<='9') x=(x<<3)+(x<<1)+c-48,c=getchar();return x;
}
inline int max(int a,int b) {return (a>b)?a:b;}
int l[3005],r[3005];
int n,m,Q;
void build(int x,int y,int i) {
l[i]=x;r[i]=y;if(x==y) return;
int mid=x+y>>1;
build(x,mid,i<<1),build(mid+1,y,i<<1|1);
}
struct Seg {
int d[3005],tag[3005];
void change(int x,int y,int i,int val) {
d[i]=max(d[i],val);
if(x<=l[i]&&y>=r[i]) {tag[i]=max(tag[i],val);return;}
int mid=l[i]+r[i]>>1;
if(x<=mid) change(x,y,i<<1,val);
if(y>=mid+1) change(x,y,i<<1|1,val);
}
int query(int x,int y,int i) {
if(x<=l[i]&&y>=r[i]) return d[i];
int mid=l[i]+r[i]>>1;int res=tag[i];
if(x<=mid) res=max(res,query(x,y,i<<1));
if(y>=mid+1) res=max(res,query(x,y,i<<1|1));
return res;
}
};
struct Tree {
Seg d[3005],tag[3005];
void change(int x,int y,int l,int r,int i,int val,int xx,int yy) {
d[i].change(xx,yy,1,val);
if(x<=l&&y>=r) {tag[i].change(xx,yy,1,val);return;}
int mid=l+r>>1;
if(x<=mid) change(x,y,l,mid,i<<1,val,xx,yy);
if(y>=mid+1) change(x,y,mid+1,r,i<<1|1,val,xx,yy);
}
int query(int x,int y,int l,int r,int i,int xx,int yy) {
if(x<=l&&y>=r) return d[i].query(xx,yy,1);
int mid=l+r>>1;int res=tag[i].query(xx,yy,1);
if(x<=mid) res=max(res,query(x,y,l,mid,i<<1,xx,yy));
if(y>=mid+1) res=max(res,query(x,y,mid+1,r,i<<1|1,xx,yy));
return res;
}
}T;
int main() {
n=read(),m=read();Q=read();
build(1,m,1);int x,y,s,w,d;
while(Q--) {
d=read(),s=read(),w=read(),x=read()+1,y=read()+1;
int t=T.query(x,x+d-1,1,n,1,y,y+s-1);
T.change(x,x+d-1,1,n,1,t+w,y,y+s-1);
}
printf("%d\n",T.query(1,n,1,n,1,1,m));
return 0;
}

[POI2006]TET-Tetris 3D的更多相关文章

  1. bzoj1513【POI2006】Tet-Tetris 3D

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

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

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

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

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

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

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

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

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

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

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

  7. P3437 [POI2006]TET-Tetris 3D

    题目 P3437 [POI2006]TET-Tetris 3D 做法 一眼就是二维线段树,仔细想想,赋值操作怎么办??\(lazy\)标记放在一维,下一次又来放个标记二维就冲突了 正解:永久化标记 怎 ...

  8. bzoj 1513 POI2006 Tet-Tetris 3D 二维线段树+标记永久化

    1511: [POI2006]OKR-Periods of Words Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 351  Solved: 220[S ...

  9. 【BZOJ】1513: [POI2006]Tet-Tetris 3D

    题意 给\(n(1 \le n \le 20000)\)个立方体\((x, y, z)\),依次落下.求所有立方体落下完了以后最高的高度. 分析 平面求最大值,平面更新最大值. 题解 二维线段树走起, ...

  10. BZOJ 1513 [POI2006]Tet-Tetris 3D

    题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1513 题意:三维空间,有一些立方体在垂直下落.立方体的左下角坐标(x,y)以及长宽 ...

随机推荐

  1. C#可选参数、命名参数、参数数组

    学习了C#4.0的新特性:可选参数.命名参数.参数数组. 1.可选参数,是指给方法的特定参数指定默认值,在调用方法时可以省略掉这些参数. 但要注意: (1)可选参数不能为参数列表的第1个参数,必须位于 ...

  2. 【Java学习经历系列-1】19岁的我,没遇见生命中的她,却遇见了java

    [写在前面]正直青春年少的你,遇到了你的她了吗?还是你也和我们今天的主人公一样,在最美好的年级,正在为你的初衷努力着,坚持着,奔波着..... 作者:李伟   我的黑客时代 01 大学专业是电子信息工 ...

  3. Working C# code for MySql5.5 Stored Procedures IN parameters

    MySQL5.5存储过程: #插入一条 涂聚文 DELIMITER $$ DROP PROCEDURE IF EXISTS `geovindu`.`proc_Insert_BookKindList` ...

  4. 面向对象第四章(封装、static)

    1.package: 1)作用:避免类名的冲突 2)包名可以有层次结构 3)类的全称: 包名.类名,同包中的类不能同名 4)建议:包名所有字母都小写 import: 1)同包中的类可以直接访问, 不同 ...

  5. webstorm git 怎么断开版本控制 webstorm git for windows 禁止 自动运行

    也是无语啊,今天装了下最新版本的webstorm ,  发现特别卡,老动不动就卡死, 看了下进程, 牛X 啊,  git for windows 一直蹭蹭蹭的疯狂增长,一开始的一点到后来的庞然大物. ...

  6. C++学习笔记(8)----C++类的大小

    C++类的大小 (i) 如下代码: #include<iostream> using namespace std; class CBase { }; class CDerive :publ ...

  7. Android LinkedList和ArrayList的区别

    LinkedeList和ArrayList都实现了List接口,但是它们的工作原理却不一样.它们之间最主要的区别在于ArrayList是可改变大小的数组,而LinkedList是双向链接串列(doub ...

  8. Android Fragment重要函数

    Fragment的常用函数: 一.Fragment对象 1.void setArguments(Bundle args); 这个函数为Fragment提供构造参数(也就是数据),参数以Bundle类型 ...

  9. 修改maven默认的jdk版本

    修改maven默认的jdk版本,想改彻底需要在maven的全局配文件(settings.xml)增加以下信息:   在profiles 节点下增加: <profile> <id> ...

  10. 自学git心得-5

    标签管理也是git里面比较重要的一部分内容,我们下载软件的时候经常看到诸如v2.0.v2.3.0这样的版本号,在git里也是一样,有时为了避免分支的名称五花八门而发生混淆的情况,我们常常会 给分支贴上 ...