今天也才改出来一道题orz,大坑最近要填,,,
今天题目难度适中,暴力都打出来了,但是第二题“spfa死了”。
于是今天就改出来了第一题和去练了下dijkstra+堆优化。。。于是时间不够用orz。。
---------------------------------------------------------------------------------------------------------------------------------------------------------------
首先我们看到这道题,很容易想到二分一个最大高度,然后枚举每个位置作为x所在地,找能把这个高度两边l,r把它围起来的最大三角形,若所用积木少于m则加高这个最大高度,否则减少。
那么找l,r的时间朴素暴力是O(n^2)的,肯定要T,于是考虑优化:
二分搭建的高度,最低为maxh+1,最高为maxh+sqrt(m)+1
如何在O(n)时间内check呢?
对于搭建积木,我们要搭出一个金字塔形,但是,并不是要搭建整个金字塔形,有时候只要搭建部分即可,如图: