HDU 2795 billboard 线段树

【C++】POCO学习总结(六):线程、线程池、同步 Poco::RunnableAdapter继承自Poco::Runnable,在Poco::RunnableAdapter构造函数中指定了类和方法;Poco::ThreadLocal是线程局部变量,也叫线程局部存储,意思是模版ThreadLocal中填充的变量属于当前线程,该变量对其他线程而言是隔离的,也就是说该变量是当前线程独有的变量。 阅读详情

题目大意:

        对于w*h(w <= 10^9, h <= 10^9 )的一块区域,连续摆放1*wi的木板,木板不能旋转,如果能放下就选择最靠上的位置摆放,并且输出行号,如果找不到直接输出-1。

解题思路:

       这题看上去和线段树没啥关系,我一开始也挺郁闷的,还以为又选错题了尴尬。

       我们先对数据范围分析一下,可以发现虽然h<=10^9,但是n<=200000,所以按照描述,我们只需关心,h<=200000的情况。

       以h和n中的最小值为界,建一颗二叉树,每个节点有一个值m,表示当前这个区间内的可容纳最大宽度。随后对于每个长度为l的木板,在树中进行dfs,在满足m<=l的条件下一直找到叶子节点,叶子节点的m减去l,输出这个叶子节点代表的行,然后对树里面的数据进行一下维护。

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
struct node
{
    int c;
    int s;
    int e;
    int m;
};
int a[210000];
node tr[1000000];
int h,w,n;
void build_tree(int c,int s,int e)
{
     tr[c].c=c;
     tr[c].s=s;
     tr[c].e=e;
     tr[c].m=w;
     if (s == e)
        return ;
     build_tree(c<<1,s,(s+e)>>1);
     build_tree(c<<1 |1,((s+e)>>1)+1,e);
}
int okay;
int update(int c,int l)
{
    if (tr[c].m < l)
        return 0;
    if (okay != -1)
        return 0;
    if (tr[c].s == tr[c].e)
    {
        tr[c].m-=l;
        okay=tr[c].s;
        return 0;
    }
    if (tr[c<<1].m >= l)
        update(c<<1,l);
    if (tr[c<<1 |1].m >= l)
        update(c<<1 |1,l);
    if (okay != -1)
    {
        tr[c].m=tr[c<<1].m<tr[c<<1|1].m?tr[c<<1|1].m:tr[c<<1].m;
    }
    return 0;
}
int main()
{
    int i;
    while (scanf("%d%d%d",&h,&w,&n) != EOF)
    {
        build_tree(1,1,n>h?h:n);
        for (i=1; i<=n; i++)
        {
            okay=-1;
            scanf("%d",a+i);
            update(1,a[i]);
            printf("%d\n",okay);
        }
    }
}


SAP_SD模块 物料科目分配/成本简介 路径:SPRO—销售与分销—基本功能—科目分配/成本—收入账户确定—收入科目确定相关性—定义并分配科目代码—定义科目代码。路径:SPRO—销售与分销—基本功能—科目分配/成本—收入账户确定—收入科目确定相关性—定义访问顺序和科目确定类型。路径:SPRO—销售与分销—基本功能—科目分配/成本—收入账户确定—收入科目确定相关性—定义并分配科目确定过程。文本主要说明销售模块中的科目分配和成本的一个对应关系。SPRO—销售与分销—基本功能—科目分配/成本—收入账户确定—检查科目分配的相关主数据。 阅读详情

相关推荐

FIFO应用于UART串口(含代码)

FIFO(First in first out)即先入先出,可以把它理解成一个缓存器,对于收发两端速度不一致,位宽不一致的情况可以使用FIFO作为收发两端中间的“调节剂”使数据可以进行正常发送。

m0_58544042的博客 2749

[HDU 2795]Billboard[线段树]

题目链接:[HDU 2795]Billboard[线段树] 题意分析: 有一个高度为h,宽度为w的广告板,给出n个海报,每个海报高度1,宽度x。问能否贴到广告板上,能输出贴到的行,否则输出-1。每张海报必须贴到能贴部分的最左上角。 解题思路: 用线段树区间存:区间中还能贴的最大宽度;每次查询整个区间,满足就继续,否则返回,当l == r时说明查询到了最满足的行,然后进行更新。 个人感受:

闲停 457

WSL2部署Cadence Virtuoso IC25.1:Ubuntu 26.04排障实录

WSL2以轻量虚拟机结合完整Linux内核,为Windows桌面环境提供了原生级Linux运行能力,解决了传统虚拟机资源开销大、双系统切换低效的问题。对于依赖X11图形协议、FlexNet许可服务和特定动态库的EDA工具链而言,利用WSL2部署Linux发行版需要关注系统集成、显示通路与许可连通性。从技术原理看,图形层X Server的配置、动态库依赖的补齐以及license服务的主机名解析,共同构成EDA工具在WSL2中稳定运行的关键环节。在芯片设计场景中,设计工程师常需在Windows办公机与Linux

weixin_29597551的博客 211

HDU2795—Billboard 线段树

HDU2795—Billboard 在学校的入口处有一个巨大的矩形广告牌,高为h,宽为w。所有种类的广告都可以贴,比如ACM的广告啊,还有餐厅新出了哪些好吃的,等等。。   在9月1号这天,广告牌是空的,之后广告会被一条一条的依次贴上去。   每张广告都是高度为1宽度为wi的细长的矩形纸条。   贴广告的人总是会优先选择最上面的位置来帖,而且在所有最上面的可能位置中,他会选择最左面的位置,而且不能...

GYH0730的博客 399

Linux 常用命令大全(2025 最新版)

掌握这些命令,你已能应对80% 的 Linux 日常操作!更多高级技巧(如crontab定时任务、iptables防火墙配置)可参考手册(man 命令名)或官方文档。实践是学习命令的最佳方式,建议在虚拟机或云服务器中多动手操作!

2302_79600390的博客 1886

RK3588嵌入式开发:从零构建Rockit多媒体处理引擎的实战指南

本文详细介绍了如何在RK3588嵌入式平台上从零构建Rockit多媒体处理引擎的实战指南。涵盖开发环境搭建、工具链配置、源码编译流程、硬件加速优化及典型问题解决方案,帮助开发者高效利用RK3588的NPU和VPU加速特性,实现高性能多媒体处理应用。

mango的博客 186

hdu 2795 Billboard ( 线段树 )

http://acm.hdu.edu.cn/showproblem.php?pid=2795 Billboard Time Limit: 20000/8000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 7320 Accepted Submission(s)...

diansitao5461的博客 161

不用写代码!用AIStarter 5.0.0离线包部署InfiniteTalk的完整指南(Windows/Mac/Linux全平台)

本文详细介绍了如何使用AIStarter 5.0.0离线包在Windows、Mac和Linux平台上零代码部署InfiniteTalk数字人。从环境准备、离线资源获取与验证,到全平台部署实操指南,提供了完整的本地化安装流程和优化建议,帮助用户快速实现AI项目的一键部署。

weixin_30275415的博客 273

HDU 2795 Billboard (线段树+贪心)

HDU 2795 Billboard (线段树+贪心) 手动博客搬家:本文发表于20170822 21:30:17, 原地址https://blog.youkuaiyun.com/suncongbo/article/details/77488127 URL: http://acm.hdu.edu.cn/showproblem.php?pid=2795题目大意:有一个h*w的木板...

suncongbo's blog 179

再生龙(clonezilla)镜像比目标盘大——基于centos8.5

再生龙恢复到小盘遇到的问题及处理,首先是修改分区大小,进入dracut模式后再尝试恢复临时系统。

u010101453的博客 3687

Ros入门 (十)----激光雷达避障 简易实现

本篇文章通过订阅/scan话题获取障碍物的距离信息,达到避障目的,提供部分代码,仅供参考。

weixin_51157015的博客 1万+

hdu 2795 Billboard 题解 (线段树)

原题链接: hdu 题意简述 有一个h∗wh*wh∗w的板子,和nnn条广告。每条广告的高度都是111,给定宽度。nnn条广告会被依次放到这个板子上,对于每条广告,会找到最上面的一行去放。在这最上面的一行里,又会找最左边的位置放。给定nnn个宽度,请输出nnn行,表示每个广告会被放在第几行。如果这个广告没有合适的位置放置,输出−1-1−1。 输入 多组数据。对于每组: h w n //如上所示 w...

LightningUZ的博客 351

【数字IC刷题】华为海思数字IC笔试题(3)详细解析版

【数字IC刷题】华为海思数字IC笔试题(3)详细解析版

MoorePlus的博客 2370

HDU-Billboard-2795(线段树)

hdu2795 Billboard Time Limit: 20000/8000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 14101Accepted Submission(s): 6046 Problem Description At...

110

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

【解题报告】 HDU 2795 Billboard -- 线段树的应用

题目大意:有一个广告板,告诉我们尺寸(即高度宽度),我们要贴广告,广告的尺寸规定为1*w,我们每次从最左上面开始贴,当给出的广告不够贴时,移到下一行贴。输出当前广告贴在第几行。 题目连接:->  HDU 2795 思路大意:拿高度来当"线段"进行拆分,每次更新一下贴完之后所剩余的长度,并顺便输出所在行即可。 接下来计算一下充当 线段树的数组 的宽度: 这个题目中广告版的高度范围比较大,1

生命有一种绝对 1186

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

HDU 2795 Billboard(线段树)

题目链接:HDU 2795 Billboard 【题意】给你一张

RaynX的专栏 584

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

HDU 2795 Billboard // 线段树 单点更新

题目描述HDU 2795 Billboard解题思路题目大意: 有一张h×w的矩形告示栏, 和 n 张 1×wi 的海报 海报每次张贴的位置为告示栏剩余位置的左上角. 要求支持下列操作: 1) 对于每张海报 输出其在告示栏的第几行 (若放不下, 则输出 -1)首先我们知道的是 告示栏上的海报最多只有n张, 即告示栏的行数最多只有n行有效 所以当输入的h大于n时, 令h = n 即可.

FZU_zyt的专栏_(:з」∠)_ 380

hdu 2795 Billboard 线段树 点更新

// hdu 2795 Billboard 线段树 点更新 // // 首先n最多是200000种,也就是说最多200000行, // 我们的线段树的区间保存的是L到R中最大的叶子节点的值 // 初始情况下都是板子的宽度。这样,每次放一块广告的时候 // 看1到h中最左边的叶子区间是什么就ok了,还是很好理解的 // // 做题的感悟,这道题其实是去年暑假集训的时候做的,当时 // 并不会,只会敲

TIMELIMITE的专栏 895

hdu 2795 Billboard -- 线段树

hdu 2795 Billboard 以h建立线段树维护最大值每个节点初始化最大值为w 对于每次改,从最左端开始找满足要求的位置 //#include<bits/stdc++.h> #include<iostream> #include<vector> //#include <unordered_map> using namespace std; //template<class...Args> //void debug(Args... args)

weach的博客 219

HDU 2795 Billboard(线段树)

题目链接:HDU 2795 Billboard 线段树单点更新,

fobdddf的专栏 562

HDU 2795 Billboard(线段树,单点查询)

题目链接: HDU 2795 Billboard 题意: 有个高为h宽为w的墙用于贴宣传海报,每张海报高为1,宽为wi,每张海报在能张贴的情况下优先选择最上面的最左面; 共有n张海报,问贴每张海报所在的行,如果贴不下,就输出-1. 分析; 建立区间为[1,h]的线段树,叶子结点即表示相应层。线段树中存储当前所有层中的最大剩余长度, 查询和更新操作其实放在一起了。 玩玩没想到的是,题目

ramay7 388

hdu 2795 Billboard(线段树)

题目链接:hdu 2795 Billboard 题目大意:有一个n∗m的公告板,一开始为空的,现在每次要想上面贴公告,长度为1∗wi,每次都尽量贴在高的地方。 解题思路:线段树,以每一行为节点建立线段树,n很大,但是q只有20w,所以只要用20w的节点即可。然后每个节点记录区间内的最大值,优先查询左区间。 #include #include #include using na

不慌不忙、不急不躁 681

线段树-hdu2795 Billboard(贴海报)

线段树-hdu2795 Billboard(贴海报) hdu2795 Billboard 题意:h*w的木板,放进一些1*L的物品,求每次放空间能容纳且最上边的位子 思路:每次找到最大值的位子,然后减去L 线段树功能:query:区间求最大值的位子(直接把update的操作在query里做了) 题意:有一块长方形h*w...

weixin_30374009的博客 159

HDU2795 Billboard 线段树

传送门:HDU2795 题意:h*w的木板,放进一些1*L的物品,每次优先放到能容纳且最上边最左边的位子,求每个物品在第几行。 思路:用线段树维护每一行的剩余长度,每次更新时优先询问左子树。代码中我将update和query合到一起了。 代码: #include #include #include #include #include #include #include #include #

WA是一笔财富 293

HDU 2795 Billboard(宣传栏贴公告,线段树应用)

HDU 2795 Billboard(宣传栏贴公告,线段树应用) ACM 题目地址:HDU 2795 Billboard 题意: 要在h*w宣传栏上贴公告,每条公告的高度都是为1的,并且每条公告都要尽量贴最上面最靠左边的,给你一系列的公告的长度,问它们能不能贴上。 分析: 不是非常好想,只是想到了就非常好写了。 仅仅要把宣传栏倒过来就好办了,这时候就...

weixin_30439031的博客 71

HDU2795 Billboard 线段树

题目链接:hdu2795 题意:有一个广告牌大小为h*w。有n个广告,每个广告高度为1,宽度为wi,要把广告贴到广告牌上。要求尽可能往上贴。并输出每个广告贴在第几行,如果不能贴上去则输出-1。 思路:可以用线段树来维护每个区间剩余打最大宽度。初始状态每个点值为w。每次查询的时候,如果左子树最大值大于wi,则往左子树查询,反之往右子树查询。 #include <bits/stdc++.h&gt...

江小举的博客 415
上一篇: hdu 1542 1255 1828 线段树矩阵并面积 交面积 重叠周长解法
下一篇: HDU 3016 线段树+简单dp
plusplus7
博客等级 码龄15年 59粉丝 173原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值