考试总结 模拟93

T1想了好多东西,什么set了,最后只写了一个暴力减枝

T2感觉是要大力转化题意,但是没有思路

T3根本没有想到高斯消元

T1「二维偏序」「树状数组」

力推大佬总结

题意首先转化为求解sa_r>=sa_{l-1}&&sb_r>=sb_{l-1}的max{r-(l-1)}

加上r>l之后是三维,然后大佬就各种CDQ,树套树的nb做法

但是由于询问是max{r-(l-1)},显然就算第三维不保证,也不会更新出ans

那么就剩二维了,似乎很常规的思路是,将一维排序,剩的一维可以用树状数组解决

这道题目还要注意特判0

T2 「搜索树」「转化题意」「区间DP」

二叉搜索树的性质:对于一个节点x,其lc或rc的所有点构成的必定为一个连续的区间

那么在建树的过程中,对于一段区间要想成为一棵子树,其必定要有一个根节点 x in [l,r]

dp定义不难写出f[l][r]表示将[l,r]建成一颗子树之后的最优贡献,再定义一个辅助数组g[l][r]表示该最优情况下的根节点是谁

转移f[l][r]=f[l][k-1]+f[k+1][r]+sum{a[l,r]} kin [l,r]

考虑去优化这个O(n^3)玩意。

首先给出结论(我也不知道大佬怎么想到的)

k的范围缩小至[g[l][r-1],g[l+1][r]]

证明其实比较简单:

考虑在已经建出的[[l,r-1]的树中加入点r显然要加在g[l][r-1]的右子树的某位置

在这种情况下想要变成最优的,只可能是将根转为g[l][r-1]的右子树的某个点

所以kin [g[l][r-1],r]同理得kin [l,g[l+1][r]]取一个交集即可

复杂度变成O(n^2)证明

最外层枚举区间长度O(n)

那么只要证每个len下枚举的sum{k}的复杂度O(n)即可

考虑[l,r]的范围是[g[l][r-1],g[l+1][r]]

[l+1][r+1]的范围是[g[l+1][r],g[l+2][r+1]]

然后发现g[l+1][r]是相等的,显然每个点至多会被枚举两次

证毕

原文地址:https://www.cnblogs.com/casun547/p/11768181.html