题解:SP1741 TETRIS3D - Tetris 3D

news2024/10/7 4:24:58

这是一道二维线段树(树套树)+标记永久化的模版题

前置知识点(来自董晓算法)

好,现在开始我们的分析:

题意简述:

在一个二维平面内,有给定的坐标,在这个坐标范围内加上这个物品的厚度。最后输出不超过极限的最高坐标。

解法分析:

由于看到了区间修改,所以第一时间想到了线段树。(好像树状数组也可以做,只是本人不会)但是,要注意到这是一个二维线区间修改,所以要引入一种新的东西:二维线段树(什么!你还没有点开前置知识点?!快去看看!)

因为有董晓老师对于二维线段树的详细讲解了,我在这里就不过多赘述。

发现问题:

对于内层而言,传统的做法可以胜任,可以打 lazy 标记,pushdown 和 pushup 也都是可以进行的。但是对于外层而言,信息量太大,无法进行,所以需要使用一种新办法:标记永久化

知识点,标记永久化

好了,问题到这就已经解决了,直接上代码吧。(四十几行真的不长了QAQ)

#include<iostream>
#include<cstring>
#include<algorithm>
#define ls(x) x*2
#define rs(x) x*2+1
#define mid l+(r-l)/2
using namespace std;
const int MAXN=4e3+10;
int d,s,n;
int a,b,h,x,y;
struct segy{
    int mx[MAXN],tag[MAXN];
    void change(int u,int l,int r,int y1,int y2,int h){
        mx[u]=max(mx[u],h);
        if(y1<=l&&r<=y2){tag[u]=max(tag[u],h);return ;}
        if(y1<=mid)change(ls(u),l,mid,y1,y2,h);
        if(y2>mid)change(rs(u),mid+1,r,y1,y2,h);
    }
    int query(int u,int l,int r,int y1,int y2){
        if(y1<=l&&r<=y2)return mx[u];
        int ans=tag[u];
        if(y1<=mid)ans=max(ans,query(ls(u),l,mid,y1,y2));
        if(y2>mid)ans=max(ans,query(rs(u),mid+1,r,y1,y2));
        return ans;
    }
}mx[MAXN],tag[MAXN];
void change(int u,int l,int r,int x1,int x2,int y1,int y2,int h){
    mx[u].change(1,1,s,y1,y2,h);
    if(x1<=l&&r<=x2){tag[u].change(1,1,s,y1,y2,h);return ;}
    if(x1<=mid)change(ls(u),l,mid,x1,x2,y1,y2,h);
    if(x2>mid)change(rs(u),mid+1,r,x1,x2,y1,y2,h);
}
int query(int u,int l,int r,int x1,int x2,int y1,int y2){
    if(x1<=l&&r<=x2)return mx[u].query(1,1,s,y1,y2);
    int ans=tag[u].query(1,1,s,y1,y2);
    if(x1<=mid)ans=max(ans,query(ls(u),l,mid,x1,x2,y1,y2));
    if(x2>mid)ans=max(ans,query(rs(u),mid+1,r,x1,x2,y1,y2));
    return ans;
}
int main(){
    cin>>d>>s>>n;
    for(int i=1;i<=n;i++){
        cin>>a>>b>>h>>x>>y;x++;y++;
        h+=query(1,1,d,x,x+a-1,y,y+b-1);
        change(1,1,d,x,x+a-1,y,y+b-1,h);
    }
    cout<<mx[1].mx[1]<<"\n";
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2193520.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Operational Concept(OpsCon)与Concept of Operations(ConOps)概念区分

Operational Concept(OpsCon)与Concept of Operations&#xff08;ConOps&#xff09;概念区分 在系统工程相关资料中会看到两个概念&#xff0c;一个是Operational Concept&#xff08;OpsCon&#xff09;&#xff0c;另一个是Concept of Operations&#xff08;ConOps&#x…

车载诊断协议DoIP系列 —— DoIP APP 应用层(AL)

车载诊断协议DoIP系列 —— DoIP APP 应用层(AL) 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师(Wechat:gongkenan2013)。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 本就是小人物,输了就是输了,不要在意别人怎么看自己。江湖一碗茶,喝…

十四、深入理解Mysql索引底层数据结构与算法

文章目录 一、索引的本质1、索引是帮助MySQL高效获取数据的排好序的数据结构2、索引的数据结构3、数据结构可视化网站 二、常见数据结构介绍1、B-Tree2、BTree&#xff08;B-Tree变种&#xff09;3、Hash结构 三、存储引擎的索引实现1、MyISAM存储引擎索引实现MyISAM索引文件和…

数理统计(第1章第2节:一些常用的抽样分布)

目录 统计量的概率分布称为“抽样分布” 1. 正态母体的子样平均数的抽样分布 正态分布 2. 卡方分布 3. t分布 4. F分布 5. 例题 6. 总结 统计量的概率分布称为“抽样分布” 1. 正态母体的子样平均数的抽样分布 正态分布 若随机变量X的概率密度为&#xff1a; 则称X服…

[C#]winform部署官方yolov11-obb旋转框检测的onnx模型

【官方框架地址】 https://github.com/ultralytics/ultralytics 【算法介绍】 Yolov11-obb&#xff08;You Only Look Once version 8 with Oriented Bounding Boxes&#xff09;是一种先进的对象检测算法&#xff0c;它在传统的Yolov3和Yolov4基础上进行了优化&#xff0c;加…

Python 如何使用 scikit-learn 进行模型训练

如何使用 scikit-learn 进行模型训练 一、简介 在现代的数据科学和机器学习领域&#xff0c;Python 已经成为最流行的编程语言之一。而其中最流行的机器学习库之一就是 scikit-learn。scikit-learn 提供了许多方便的工具和函数来实现常见的机器学习任务&#xff0c;包括数据预…

spi hal库 正点原子版

这个图 是了解一下 spi就是cs片选&#xff0c;clk时钟&#xff0c;miso主机输入从机输出&#xff0c;mosi主机输出从机输入&#xff0c;这四根线 spi最主要就是极性和相位的选择&#xff0c;spi是边沿采集&#xff0c;和iic的电平采集不一样&#xff0c;所以需要通过极性和相位…

SpringBoot 多元化配置(正则表达式,配置文件优先级)

1.配置绑定 所谓“配置绑定”就是把配置文件中的值与 JavaBean 中对应的属性进行绑定。通常&#xff0c;我们会把一些配置信息&#xff08;例如&#xff0c;数据库配置&#xff09;放在配置文件中&#xff0c;然后通过 Java 代码去读取该配置文件&#xff0c;并且把配置文件中…

【持续更新中】MMDetection3训练自己的数据集常见报错解决

博主近来跑自己数据集需要对比试验&#xff0c;故选择了MMDetection3这一算法整合详细的框架&#xff0c;遇到了较多问题在此处留作记录&#xff0c;若你也有相应的问题可以在评论区提出与解决方法。会持续更新&#xff0c;同时欢迎批评指正。 0.ModuleNotFoundError: No modu…

从博士到院士,国家级人才荣誉称号一览

在中国的科技界&#xff0c;两院院士代表着学术成就的巅峰荣誉&#xff0c;享有终身荣耀&#xff0c;并且是科研人员梦寐以求的最高职业荣誉。除了院士头衔之外&#xff0c;国家和各部委还设立了一系列针对不同年龄段学术人才的国家级荣誉称号体系&#xff0c;旨在表彰各类优秀…

8.9K Star,开源自托管离线翻译引擎

Hi&#xff0c;骚年&#xff0c;我是大 G&#xff0c;公众号「GitHub 指北」会推荐 GitHub 上有趣有用的项目&#xff0c;一分钟 get 一个优秀的开源项目&#xff0c;挖掘开源的价值&#xff0c;欢迎关注。 在全球化的今天&#xff0c;跨语言交流已成为日常需求&#xff0c;然…

U3D游戏开发之中剧情系统的制作

今天我们来揭秘带有人物选项的剧情系统该如何制作。 半年前我接到了一个剧情系统的需求&#xff0c;本着能抄代码绝不自己动手的想法在B站上面找现成系统&#xff0c;大概看了一些内容&#xff0c;发现比较繁琐就直接自己动手写了。 目录 1 需求分析 2 梳理代码逻辑 3 代码书…

k8s 中存储之 NFS 卷

目录 1 NFS 卷的介绍 2 NFS 卷的实践操作 2.1 部署一台 NFS 共享主机 2.2 在所有k8s节点中安装nfs-utils 2.3 部署nfs卷 2.3.1 生成 pod 清单文件 2.3.2 修改 pod 清单文件增加 实现 NFS卷 挂载的 参数 2.3.3 声明签单文件并查看是否创建成功 2.3.4 在 NFS 服务器 创建默认发布…

[c语言]一句话讲清循环中break和continue的作用与区别

1.两者的作用 break和contuinue都只能在循环中使用&#xff0c;都用来停止循环。 2.两者的区别 break 在循环中只要遇到break&#xff0c;就直接永久终止当前循环&#xff0c;开始执行当前循环之外的代码。 continue 在循环中只要遇到continue&#xff0c;就结束本次循环&…

免费送源码:Java+ssm+JSP+Ajax SSM棕榈校园论坛的开发 计算机毕业设计原创定制

摘要 随着计算机科学技术的高速发展,计算机成了人们日常生活的必需品&#xff0c;从而也带动了一系列与此相关产业&#xff0c;是人们的生活发生了翻天覆地的变化&#xff0c;而网络化的出现也在改变着人们传统的生活方式&#xff0c;包括工作&#xff0c;学习&#xff0c;社交…

数据库软题6.1-关系模式-关系模式的各种键

关系模式的各种键 题1-由关系模式求候选键 1. 候选键唯一不冗余 对选项进行闭包运算&#xff0c;如果得到全部属性U&#xff0c;则为候选码 A:AC-ABC-ABCD B:AB-ABC-ABCD C:AE-ABE-ABCE -ABCDE-ABCDEH D:DE2. R的候选码可以从A1,A2,A3,A1A2,A1A3,A2A3,A1A2A3中选择&#xff…

Flutter String 按 ,。分割

在 Flutter 中&#xff0c;如果你想将一个字符串按特定的字符&#xff08;例如中文逗号 &#xff0c; 和英文句号 .&#xff09;进行分割&#xff0c;可以使用 Dart 语言的字符串处理功能。具体来说&#xff0c;你可以使用 split 方法&#xff0c;并传入一个正则表达式来匹配这…

CSS基础-常见属性(二)

6、CSS三大特性 6.1 层叠性 如果样式发生冲突&#xff0c;则按照优先级进行覆盖。 6.2 继承性 元素自动继承其父元素、祖先元素所设置的某些元素&#xff0c;优先继承较近的元素。 6.3 优先级 6.3.1 简单分级 1、内联样式2、ID选择器3、类选择器/属性选择器4、标签名选择器/…

数据结构之树(1)

课程&#xff1a;b站王道数据结构 5.1.1 树的定义和基本术语_哔哩哔哩_bilibili 写在前面&#xff1a;基础不牢&#xff0c;地动山摇。。 一、树 1、概念 树是n&#xff08;n>0)个结点的有限集合&#xff0c;n0时&#xff0c;称为空树 非空树的特性 有且仅有一个根节点…

智能家居有哪些产品?生活中常见的人工智能有哪些?

智能家居有哪些产品? 1、智能照明设备类&#xff1a;智能开关、智能插座、灯控模块、智能空开、智能灯、无线开关。 2、家庭安防类&#xff1a;智能门锁、智能摄像机、智能猫眼、智能门铃。 3、智能传感器类&#xff1a;烟雾传感器、可燃气体传感器、水浸传感器、声光报警器…