考试过程
最后一场两位数的考试,死的很惨
开题后T1看了一眼,第一眼觉得是最长上升子序列,线性dp的那种
然后就去刚O(n)的算法,不久就听到大多数人敲键盘的声音,比较着急,
尤其是旁边人自信满满的动作。。。。然后就通过写暴力稳定心态。写完之后没试样例就继续想
思考效率指数级降低。。。想要对旁边人予以“反击”,可还是没有思路
1h多后有看题发现样例过不了,虽然之前先看了一眼样例但是并不能把握每一个细节
又读了半天题最终在打算弃掉T1前读懂了。。。
浪费了1h30min??顿时一股来自西西伯利亚的寒流涌入心田。。。。。
充满着绝望的眼神又看了一边,发现理解对题意之后就比较好想了,
自认为当时比较清晰的大脑去思考了一个模糊的二分
边打边想实现所以写得很慢写完一边过了样例以为稳了,在还剩1h的时候激动得写完对拍,然后看着AC100,200...
WA了??!!我kuku,“一定是数组开小了”我安慰自己,发现并不是,就拍了好久的小点,终于发现自己二分的思路就不对
啊。。。人生啊。。。我这一场干了点什么啊。。
未避免20+0+0的尴尬,于是写了个T3暴力(还没开ll),T2读完题就写了个puts("-1").....
T1最后想出来了一个权值线段树的思路已经没时间了,就望向窗外的凉凉月色........
越到AFO,废话越多了。
题解
T1「二分」「单调栈」
首先可以想到每次修改的pos之前的计算ans的过程不变
那么数组存一下,然后我们只需要看当前改变后的高度h与前面的maxh的关系
if h>maxh 那么这个点就是下一个要到的点了,然后就需要找到后面的第一个大于h的位置,与len
else 直接去找第一个>maxh的位置
我们可以倒着去搞出来:从某一位置开始往后的最长贡献
那就只剩找后面第一个大于h的位置了
我考场上的思路是权值线段树每次区间赋值,单点查询
但是单调栈上二分的打法代码比较短,也就是维护一个从后往前的单调栈去二分出所求位置
T2「贪心」
实现过程:首先我们把原料给新建一个仓库,模拟到没一
原文地址:https://www.cnblogs.com/casun547/p/11791406.html