估分:100+100+100
实际得分:70+100+0
第一题:
刚看到题目的时候认为是贪心,但只拿了70分。
正解是动态规划。
设f[i]表示在第i个数时的最大分队数,方程:f[i]=max(f[0~i-a[i]])+1。时间复杂度
o(n2)
,过不了。
用一个数组s来维护0~i的最大值,f[i]=s[i-a[i]]+1。时间复杂度就变成了
o(n)
。fengfeiyang还用了一个神™线段树来维护。
第二题:
本来以为这一道题很难……很快就发现这是一道大水题。
我们知道a肯定是等于n的,那么就可以枚举b,然后倒着推,看看是否能推到1,1。如果可以,就更新min。
第三题:
比赛的时候只想出了100分的方法,直接模拟就可以了。
正解:
每一个操作会产生一个新的版本。
undo则是版本i=版本i-x-1;
查询就用倍增来维护。