考场:(85 + 0 + 35 = 120)
T1:
赛时想到正解,但将(LIS)(最长上升子序列)写成了最长不下降子序列,GG(竟然还WA85)
我想的太笨,在求完(f[])和(g[]),在用线段树维护做一遍。
(f[i])指以(i)结尾的(LIS),(g[i])指以(i)为开头的(LIS)
对于当前(i),我们将前面的(f[j])都添加到(a[i]-x)当中,而当前的答案则为(g[i]+tree_{max}(-maxn,a[i]-1))
T2:
考场想到了(dfs),(DP),折半搜索。。。
但发现时间都过不了,(DP)的话空间就(MLE),且时间也(TLE)。
结果没想到正解是(DP)。
设(f[i][j][k])表示走到((i,j))乘积为(k)的方案数。
由于时空超限,发现k有很多多余的。
所以可以设(f[i][j][k])表示走到((i,j))乘积为(n/k)的方案数。
T3:
考场先很快想到了(O(n^2*l)) 的解法,随后想到了(O(n^2))的预处理做法,但是空超,也没时间了,就这样打完了。
原来由于询问只有(100)个,所以我们可以压缩空间,将(f[i][j])变成与i子串为(q[j-1]+1) ~ (q[j])相似的个数。
总结:
对于每个解法,都要尝试着去优化。
如果空间过不去的话,可以试着除去一些不必要的空间。
要先想好思路,不要打到一半后被证伪了。。。
现在:(100 + 100 + 100 = 300)