模拟测试76
T1:
考虑特殊构造,使不同段不会相互影响。
分块构造,大段递减,小段递增。
最长下降子序列即为段数,最长上升子序即为最长的一段的长度。
特判无解情况,然后分配一下长度即可。
时间复杂度$O(n)$。
T2:
将所有的数排序,统计前缀和,如果到某个点发现下一个数大与前缀和的两倍,则会出现断层。
统计断层长度得到答案。
时间复杂度$O(nlogn)$。
T3:
考虑转化一下限制条件。
满足条件的树有以下性质:
1、子树编号连续;
2、坐子树节点小于右子数;
3、左子树根节点编号为当前节点加一。
首先我们强制$a<b$,那么两个点的关系为先后关系。
强制$a$在$b$后:
$a$一定是$b$的祖先,因为如果他们的位置关系是第二种的话,$a$在中序遍历中一定在$b$之前,所以$b$一定在$a$的左子树中。
强制$a$在$b$前:
如果$a$是$b$的祖先,则$b$在$a$的右子树,其余情况下$b$不在该子树中,这种限制和$b$不在$a$的左子树中等价。
设$dp[i][j]$为以$i$为根,子树大小为$j$的方案数,枚举左子树大小转移。
时间复杂度$O(n^3)$。