10.19 noip 模拟题 【NOIP2018模拟赛2018.10.19】

本文介绍了如何解决一个关于积木搭建的NOIP模拟赛题目,通过二分查找最大高度并利用单调性优化求解过程,避免了暴力搜索导致的时间复杂度过高。文章详细阐述了检查条件的设定以及利用前缀和计算所需积木数量的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天也才改出来一道题orz,大坑最近要填,,,

今天题目难度适中,暴力都打出来了,但是第二题“spfa死了”。

于是今天就改出来了第一题和去练了下dijkstra+堆优化。。。于是时间不够用orz。。

---------------------------------------------------------------------------------------------------------------------------------------------------------------

首先我们看到这道题,很容易想到二分一个最大高度,然后枚举每个位置作为x所在地,找能把这个高度两边l,r把它围起来的最大三角形,若所用积木少于m则加高这个最大高度,否则减少。

那么找l,r的时间朴素暴力是O(n^2)的,肯定要T,于是考虑优化:

二分搭建的高度,最低为maxh+1,最高为maxh+sqrt(m)+1

如何在O(n)时间内check呢?

对于搭建积木,我们要搭出一个金字塔形,但是,并不是要搭建整个金字塔形,有时候只要搭建部分即可,如图:

首先,要知道的是这道题相对每个i的l是递增的。

我们发现,对于一个位置x,如果能找到它所对的l,那么对于位置x-1,它的l必≤位置x所对的l,且从位置x所对的l ~x-1绝对不满足能做绿色部分的左边框。因为在向左移的过程中,左边的每个位置的h的要求总是增大的(金字塔形)

所以l

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值