1513: [POI2006]Tet-Tetris 3D

Time Limit: 30 Sec  Memory Limit: 162 MB
Submit: 540  Solved: 175
[Submit][Status]

Description

Task: Tetris 3D

"Tetris" 游戏的作者决定做一个新的游戏, 一个三维的版本, 在里面很多立方体落在平面板,一个立方体开始落下直到碰上一个以前落下的立方体或者落地即停止.
作者想改变一下游戏的目的使得它更大众化,在新游戏中你将知道落下的立方体信息以及位置,你的任务就是回答所有立方体落下后最高的方块的高度.所有的立方体在下落过程中都是垂直的并且不会旋转.平板左下角坐标为原点,并且平行于坐标轴.

Input

第一行给出三个整数 D, S and N ( 1<=
N<= 20 000, 1<= D, S <=1 000), 分别表示平板的长和宽以及下落立方体的数目. 接下来N
行每行描述一个立方体.
每行包含5个整数: d, s, w, x and y (1<= d, 0 <=x, d + x<= D, 1 <=s,
0<= y, s + y<= S, 1<= w <=100 000), 分别表示立方体的长\宽\高以及落下的左下角坐标,
长和宽都是平行于平板坐标轴的,落下后立方体着地的四个角坐标分别为: (x, y), (x + d, y), (x, y + s) and (x
+ d, y + s).

Output

一个整数表示所有立方体落下后最高的方块的高度.

Sample Input

7 5 4
4 3 2 0 0
3 3 1 3 0
7 1 2 0 3
2 3 3 2 2

Sample Output

6

【思路】

线段树套线段树

第二维的每一维都是一棵线段树,两者操作相似。

【代码】

 #include<cstdio>
#include<algorithm>
using namespace std; const int N = *1e3+; int D,S,n;
int ql,qr,qd,qu; struct segx{
int v[N],setv[N];
void change(int u,int L,int R,int l,int r,int x) {
v[u]=max(v[u],x);
if(l<=L && R<=r) setv[u]=x;
else {
int M=(L+R)>>;
if(l<=M) change(u<<,L,M,l,r,x);
if(M<r) change(u<<|,M+,R,l,r,x);
}
}
int query(int u,int L,int R,int l,int r) {
if(l<=L && R<=r) return v[u];
else {
int M=(L+R)>>,ans=setv[u];
if(l<=M) ans=max(ans,query(u<<,L,M,l,r));
if(M<r) ans=max(ans,query(u<<|,M+,R,l,r));
return ans;
}
}
};
struct segy{
segx v[N],setv[N];
void change(int u,int L,int R,int l,int r,int x) {
v[u].change(,,S,qd,qu,x);
if(l<=L && R<=r) setv[u].change(,,S,qd,qu,x);
else {
int M=(L+R)>>;
if(l<=M) change(u<<,L,M,l,r,x);
if(M<r) change(u<<|,M+,R,l,r,x);
}
}
int query(int u,int L,int R,int l,int r) {
if(l<=L && R<=r) return v[u].query(,,S,qd,qu);
else {
int M=(L+R)>>,ans=setv[u].query(,,S,qd,qu);
if(l<=M) ans=max(ans,query(u<<,L,M,l,r));
if(M<r) ans=max(ans,query(u<<|,M+,R,l,r));
return ans;
}
}
}T; int main() {
scanf("%d%d%d",&D,&S,&n);
int d,s,w,x,y;
for(int i=;i<n;i++) {
scanf("%d%d%d%d%d",&d,&s,&w,&x,&y);
ql=x+,qr=x+d,qd=y+,qu=y+s;
int h=T.query(,,D,ql,qr);
T.change(,,D,ql,qr,h+w);
}
qd=,qu=S,ql=,qr=D;
printf("%d",T.query(,,D,ql,qr));
return ;
}

bzoj 1513 [POI2006]Tet-Tetris 3D(二维线段树)的更多相关文章

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

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

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

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

  3. 洛谷.3437.[POI2006]TET-Tetris 3D(二维线段树)

    题目链接 下落一个d*s的方块,则要在这个平面区域找一个最高的h' 更新整个平面区域的值为h+h' 对于本题,维护最大高度h和all 对于平面的x轴维护一棵线段树t1,每个t1的节点维护对应y轴的两棵 ...

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

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

  5. BZOJ 4785 [Zjoi2017]树状数组 | 二维线段树

    题目链接 BZOJ 4785 题解 这道题真是令人头秃 = = 可以看出题面中的九条可怜把求前缀和写成了求后缀和,然后他求的区间和却仍然是sum[r] ^ sum[l - 1],实际上求的是闭区间[l ...

  6. BZOJ.4553.[HEOI2016&TJOI2016]序列(DP 树状数组套线段树/二维线段树(MLE) 动态开点)

    题目链接:BZOJ 洛谷 \(O(n^2)\)DP很好写,对于当前的i从之前满足条件的j中选一个最大值,\(dp[i]=d[j]+1\) for(int j=1; j<i; ++j) if(a[ ...

  7. BZOJ 3489 A simple rmq problem 可持久化KDtree/二维线段树

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3489 题意概述: 给出一个序列,每次询问一个序列区间中仅出现了一次的数字最大是多少,如果 ...

  8. [BZOJ4785][ZJOI2017]树状数组(概率+二维线段树)

    4785: [Zjoi2017]树状数组 Time Limit: 40 Sec  Memory Limit: 512 MBSubmit: 297  Solved: 195[Submit][Status ...

  9. UVA 11297 线段树套线段树(二维线段树)

    题目大意: 就是在二维的空间内进行单个的修改,或者进行整块矩形区域的最大最小值查询 二维线段树树,要注意的是第一维上不是叶子形成的第二维线段树和叶子形成的第二维线段树要  不同的处理方式,非叶子形成的 ...

  10. POJ2155 Matrix二维线段树经典题

    题目链接 二维树状数组 #include<iostream> #include<math.h> #include<algorithm> #include<st ...

随机推荐

  1. Check Mysql Database Size

    SELECT ROUND( SUM(data_length + index_length) / 1024 / 1024 ) TOTAL_MB, ROUND(SUM(data_length) / 102 ...

  2. js初学必知三重点

    这里列出了一些JS重要知识点(不全面,但自己感觉很重要).彻底理解并掌握这些知识点,对于每个想要深入学习JS的朋友应该都是必须的. 讲解还是以示例代码搭配注释的形式,这里做个小目录: JS代码预解析原 ...

  3. css3 标题超过长度自动省略号

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...

  4. 查看 MySQL 数据库中每个表占用的空间大小

    TABLE_SCHEMA : 数据库名TABLE_NAME:表名ENGINE:所使用的存储引擎TABLES_ROWS:记录数DATA_LENGTH:数据大小INDEX_LENGTH:索引大小 SELE ...

  5. Pyhon编码事项

    1. 永远不要使用import * Pylint代码审查:Wildcard import XXX 如果函数名重名,或者要导入的内容里面包含了from datetime import datetime, ...

  6. C语言之程序结构

    一个好的程序首先要有好的程序结构,我从变量和结构两个方面来做分析. 一.浅谈程序中的变量 一个程序架构最基本的就是程序变量,谈到程序中的变量,我们应该考虑两部分,一方面是变量的作用域,一方面是变量的生 ...

  7. raywenderlich-iOS设计模式Part 1/2【译】

    原文地址:http://www.raywenderlich.com/86477/introducing-ios-design-patterns-in-swift-part-1 Update 04/22 ...

  8. 自设chrome默认滚动条样式

    今天无聊,想着chrome这种全面使用html的浏览器,可不可以让我自行改变它的默认CSS呢,结果去查查,有,很好 win7/8目录为 C:\Users\[你的用户名]\AppData\Local\G ...

  9. STM32之外部中断控制

    一.STM32外部中断 1.STM32外部中断结构图 如上图所示:主要包括四个环节,GPIO.AFIO.EXTI.NVIC.以STM32F103VE(100脚)为例说明硬件模块的数量: GPIO:   ...

  10. 从xib加载文件

    一般自定义View, 如果从xib加载文件, 定义一个类方法, 返回xib + (instancetype)dropdown { return [[[NSBundle mainBundle] load ...