1513: [POI2006]Tet-Tetris 3D

Time Limit: 30 Sec  Memory Limit: 162 MB
Submit: 733  Solved: 245
[Submit][Status][Discuss]

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

HINT

Source

题目大意:给定一个二维矩阵。每次询问一个矩形范围内最大值max。并把矩形内全部数更新为max+p。

看到这道题非常easy想到二维线段树,可是存在两个问题:二维线段树的标记下传和信息上传不easy实现。

那怎么解决呢?答案是用标记永久化。

我们用v和tag表示由子节点求出的最大值和全然覆盖该区间的最大值。每次改动时把路径上全部的v和底端的tag都改动,每次询问将路径上的全部tag和底端的v取最大值。

#include<set>
#include<map>
#include<ctime>
#include<queue>
#include<cmath>
#include<cstdio>
#include<vector>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define ll long long
#define inf 1000000000
using namespace std;
ll read()
{ll x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*f;
}
int D,S,N;
int ql,qr,qd,qu;
struct segx
{int v[3005],tag[3005];void change(int k,int l,int r,int x,int y,int val){v[k]=max(v[k],val);if(l==x&&y==r){tag[k]=max(tag[k],val);return;}int mid=(l+r)>>1;if(x<=mid)change(k<<1,l,mid,x,min(mid,y),val);if(y>mid)change(k<<1|1,mid+1,r,max(x,mid+1),y,val);}int query(int k,int l,int r,int x,int y){if(l==x&&y==r)return v[k];int mid=(l+r)>>1,ans=tag[k];if(x<=mid)ans=max(ans,query(k<<1,l,mid,x,min(mid,y)));if(y>mid)ans=max(ans,query(k<<1|1,mid+1,r,max(x,mid+1),y));return ans;}
};
struct segy
{segx v[3005],tag[3005];void change(int k,int l,int r,int x,int y,int val){v[k].change(1,1,S,qd,qu,val);if(l==x&&y==r){tag[k].change(1,1,S,qd,qu,val);return;}int mid=(l+r)>>1;if(x<=mid)change(k<<1,l,mid,x,min(mid,y),val);if(y>mid)change(k<<1|1,mid+1,r,max(x,mid+1),y,val);}int query(int k,int l,int r,int x,int y){if(l==x&&r==y)return v[k].query(1,1,S,qd,qu);int mid=(l+r)>>1,ans=tag[k].query(1,1,S,qd,qu);if(x<=mid)ans=max(ans,query(k<<1,l,mid,x,min(mid,y)));if(y>mid)ans=max(ans,query(k<<1|1,mid+1,r,max(x,mid+1),y));return ans;}
}T;
int main()
{D=read();S=read();N=read();int d,s,w,x,y;for(int i=1;i<=N;i++){d=read();s=read();w=read();x=read();y=read();ql=x+1;qr=x+d;qd=y+1;qu=y+s;int ans=T.query(1,1,D,ql,qr);T.change(1,1,D,ql,qr,ans+w);}qd=1;qu=S;printf("%d\n",T.query(1,1,D,1,D));return 0;
}

转载于:https://www.cnblogs.com/zsychanpin/p/6984294.html

bzoj1513【POI2006】Tet-Tetris 3D相关推荐

  1. 【备注】【C24】《Android 3D游戏开发技术详解与典型案例》PDF 下载

    [C24]<Android 3D游戏开发技术详解与典型案例>PDF 下载 目前市面上的Android技术书籍还比较少,Android3D游戏开发的书籍更是没有.因此,在现在市面上,Andr ...

  2. 【转】PCB中3D相关功能详解

    如果PCB Layout工程师能够在设计过程中,使用设计工具直观地看到自己设计板子的实际情况,将能够有效的帮助他们的工作.尤其现在PCB板的设计越来越复杂,密度越来越高,如果能够洞察多层板内部则可以帮 ...

  3. 【Unity】5.1 3D坐标系基础知识

    分类:Unity.C#.VS2015 创建日期:2016-04-20 一.简介 在虚拟的游戏世界中,与3D有关的数学知识决定了游戏引擎如何计算和模拟出开发者以及玩家看到的每一帧画面.学习或者回想一下基 ...

  4. 【常用】2DUI跟随3D物体移动(待修复)

    using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; ...

  5. 【Unity】UI或3D场景自动设置渐变色背景

       给定一组色值(或者多组色值,每次随机取一组),初始化时创建图片并赋值给UI的Image或3D场景的Sprite.从下/左往上/右,按曲线渐变 using System.Collections; ...

  6. 【ADNI】对 nii 3D 数据进行裁剪(Matlab)待完善...

    crop_ADNI_GM.m function num_list = crop_ADNI_GM(filelistname, save_path, label) %%%% %% 脚本说明 % 1)对AD ...

  7. 【babylonjs】环形屏幕3d展示

    0.前言: 前阵子接到一个需求是需要开发一个能够跑在环形屏幕上的3d展示项目 刚接到这个项目的时候我以为能吧相机fov直接调整成360°,后来发现我想多了..babylonjs中的相机最大视角就是π( ...

  8. 【集思广益】关于手机3D APP

    小伙伴们 集思广益一下 除了3D手游以外还有那些手机APP会运用到3D技术??多多益善 答得多的有奖

  9. 【ECCV2022】如何解决3D检测中长尾问题?

    作者|汽车人 编辑|3D视觉开发者社区 题目:Improving the Intra-class Long-tail in 3D Detection via Rare Example Mining 作 ...

最新文章

  1. criscriter英语测试软件,English test (英语测验)
  2. 【转】MYSQL入门学习之七:MYSQL常用函数
  3. 美女被偷之后.....
  4. mdb 查询过于复杂_【律联云知产课堂】南京商标查询主要从哪些方面判断一个商标是否适合注册?...
  5. shift用计算机,电脑Shift键的妙用,你都了解吗?
  6. win10安装ubuntu系统出现的一些问题以及解决方案
  7. linux rpm安装mysql5.7.*密码策略,访问策略等常见问题
  8. mysql pt kill脚本_mysql 案例 ~ pt-kill工具的使用
  9. linux 下的按键精灵 xdotool
  10. 如何在VScode中配置python第三方库
  11. html作业word,Word实验作业——个人简历.doc
  12. uniapp,小程序返回到指定页面以及到指定页面左上角的房型默认返回首页
  13. 我用Python+PySide6做了个图形化番茄钟,这下可以提醒自己放松一下了。
  14. 趣味密码学入门--cryptohack
  15. Eclipse自动排版设置
  16. 声光控延时开关设计原理
  17. Android gif 动画
  18. dnf跨5无限连接服务器,DNF:跨5跨6被特殊“服务”,请问:会不会有补偿,制裁怎么解决...
  19. 这样设置,让你的 iPhone 用起来更加得心应手
  20. google api 得到 天气

热门文章

  1. 从CMOS到触发器(一)
  2. C#相关的DateTime操作
  3. ArcGIS.Server.9.3和ArcGIS API for Flex的GeometryService和buffer分析(十)
  4. Internet Explorer 8 Beta 2十大看点
  5. MSSql-1内部数据库版本号
  6. 一个简单粗暴的爬虫 - 必应今日美图
  7. 给定入栈序列,判断一个串是否为出栈序列
  8. 【BZOJ2631】tree (LCT)
  9. jquery 只能输入汉字
  10. 兼容PC和手机触摸代码