标签:出现 节点 ceil code 取整 负数 树状 检查 记录
观察样例解释易知我们需要判断总和是否为 \(m\) 的倍数。注意特判 \(n=0,m \neq 0\) 和 \(m=0,sum \neq 0\) 的情况。
\(n\) 是偶数就把两个对角线填上 \(1\) ,这样每行每列的和都是 \(2\) 。
\(n\) 是奇数就把正中间的一行一列改成中间都是 \(0\) 边界是 \(1\) ,以 \(n=5\) 为例:
按照它的二分过程做,\(a[mid]<=x\) 等价于 \(mid<=pos\) ,这样就可以算出钦定了 \(a\) 个位置必须比 \(x\) 大,\(b\) 个位置必须比 \(x\) 小,\(n-1-a-b\) 个位置可以随便填。于是序列方案就是:
直接预处理阶乘和阶乘逆元就行。注意判断 \(x-1-a,n-x-b\) 是否是负数,如果是负数直接输出 \(0\) 。
只能向叶子走意味着每个点的权值只能转移到它子树内所有的叶子节点里,我们只要记录每棵子树的权值和 \(sum_x\) 以及叶子节点个数 \(sz_x\) ,市民采取的最优方案一定是平均,而歹徒采取的最优方案一定是选最大的叶子,所以 \(ans=\max\{\lceil \frac{sum_x}{sz_x} \rceil\}\) 。注意 \(sum_x=0\) 时上取整要特判。
求所有子序列的 \(\textsf{mex}\) 的 \(\textsf{mex}\) ,发现 \(a_i\) 的范围不大,同时意识到 \(\textsf{mex}\) 不会超过 \(\max\{a_i\}+1\) ,考虑枚举答案 \(\textsf{mex} =x\) 。如何检查没有一个子序列的 \(\textsf{mex}=x\) 且所有子序列最大 \(\textsf{mex}=x-1\) ?考虑把 \(x\) 的出现位置记录下来,假设是 \(p_1,p_2,\dots,p_k\) ,我们只需要检查 \([1,p_1],[p_1,p_2],[p_2,p_3],\dots,[p_{k-1},p_k],[p_k,n]\) 这些段的 \(\textsf{mex}\) 即可,这个很容易用线段树或者树状数组维护。每次如果 \(x\) 不是答案就把刚刚检查的区间的 \(x\) 标记为出现过,这个可以直接用取最大值的方式维护,如果 \(x\) 是答案就直接输出。
前五题是昨晚写的,有一题 fst 了不过早上起来已经加了个特判改过了。F是早上补的,可惜CF评测队列太长了,暂时不知道我过没过,先鸽着,如果做法是对的就来更。
题解 Codeforces Round #678 (Div. 2) (CF1436)
标签:出现 节点 ceil code 取整 负数 树状 检查 记录
原文地址:https://www.cnblogs.com/Kylin-xy/p/tijie-cf1436.html