T1 DZY Loves Partition
题目大意
给定n,m,询问将n拆成m个互不相同的数的和且乘积最大
题解
我们都知道和一定时乘积最大肯定差最小
所以我们不妨假设答案一定是两段连续的数的乘积
并且两段相邻的位置的差一定
≤2
(显然,我就不证了)
CODE
T2 DZY Loves Connecting
题目大意
给定一棵树,求所有联通块的点数之和 mod 1e9+7
题解
树形DP
f[i]:i的子树内过点i的方案数
g[i]:i的子树内过点i的联通块点数和
ans=∑g[i]
f[i]=∏(f[son[i]]+1)
g[i]=f[i]+∑(f[i]f[son[i]]+1∗g[son[i]])
这个其实挺简单的
但是!!!!!本场比赛最大的cha点就在此题!!!!
那个分母我们肯定是求逆元,但是方案数可能是模数的倍数,gg啦
~~~
所以我们换种方法求g[i]
g[i]=∑((f[son[i]]+1)∗g[i]+f[i]∗g[son[i]])
这种也很好理解,第一部分是当前这棵子树拼出的方案与前面所有子树合并,第二部分是前面的和这棵子树中的方案拼起来
CODE
T3 DZY Loves Math
题目大意
题解
分段打表可过……
T4 DZY Loves Sorting
题目大意
初始是一个
{1..n}给出m次操作,有两种操作
1.[L,R]递增排序
2.[L,R]递减排序
最后询问第k个数是多少
题解
好神啊~!
二分第k个数的大小,将小于等于k的赋为0,大于k的赋为1
每次操作相当于对区间[L..L+区间0的个数−1]都赋为0,区间[R−区间1的个数+1..R]
这样线段树就能处理了,最后查询第k个是否是0
复杂度为O(Nlog2N)
为什么可以二分?我们极端点看,当你二分的数是n那最后查找的点一定是0所以二分的右区间左移,1也同理
CODE