做题记录 26.3.21
\(\textcolor{blue}\odot\) CF2163D2 Diadrash (Hard Version)
若一个区间被另一个大区间包含,则较大者一定不小于较小者,从而可以删去多余区间,剩下的区间互不包含
将它们排序后,左右端点都严格递增
一个区间 \([l,r]\) 的 \(\text{mex}\) 为 \([1,l)\) 和 \((r,n]\) 的 \(\min\),考虑排序后的区间序列,显然 \(\min[1,l)\) 递减,\(\min(r,n]\) 递增
从而可以二分 \(\min[1,l)-\min(r,n]\),在二分过程中不断更新答案
询问次数 \(2\log_2(n)\)
\(\textcolor{purple}\odot\) CF293E Close Vertices
点分治后双指针或二维数点即可
时间复杂度 \(O(n\log^2 n)\)
\(\textcolor{purple}\odot\) CF1055F Tree and XOR
一个暴力的实现为二分答案,然后每次 \(O(n\log V)\) 统计数量
改写之,从高到低确定答案每一位是 \(0/1\),每次暴力统计,时间复杂度不变
对于一个位置,统计的过程是一个指针在树上移动的过程,在从高到低构造答案时可以并行移动,从而做到 \(O(n\log V)\)
此时空间复杂度过大,考虑每次只用 \(\text{Trie}\) 的相邻层,且每次使用的向下递增,可以动态生成并删去更上层的结点,做到空间复杂度 \(O(n)\)
\(\textcolor{purple}\odot\) CF1320E Treeland and Viruses
建立虚树后跑多源最短路即可,时间复杂度 \(O(n\log n+\sum (k_i+m_i)\log (k_i+m_i))\)
\(\textcolor{purple}\odot\) CF2135F To the Infinity
令 \(F(u)=f_u(x)\)
对于一个结点 \(u\),考虑 \(u\) 一直向左儿子移动,经过的右儿子依次为 \(p_{1\sim k}\),则 \(F(u)=x^{\prod_i F(p_i)}\)
显然 \(F(u)\) 比它儿子的 \(F\) 大,假设从下往上依次得出每个 \(F\) 的排名,将 \(p\) 按排名从大到小排序
定理:假如 \(u\) 对应 \(p_{1\sim k}\),\(v\) 对应 \(q_{1\sim t}\),则 \(F(u)<F(v)\) 当且仅当 \(p\) 的字典序 \(<q\),\(>\) 同理
证明:
- 只考虑 \(<\) 的情况
- 若 \(p\) 为 \(q\) 的前缀则显然
- 否则存在 \(i\) 使得 \(F(p_i)<F(q_i)\),从而 \(\log_x F(p_i)<\log_x F(q_i)\),显然 \(x\) 取整数时左右都是整数,从而 \(\log_x F(p_i)+1\le \log_x F(q_i)\),即 \(x\times F(p_i)\le F(q_i)\)
- 取 \(x>n\),则 \(F(q_i)> \sum F(p_{i\sim k})\)
- 从而 \(F(u)<F(v)\)
从下往上拓扑排序,用可持久化线段树维护每个结点的 \(\{p\}\),每次选择 \(F\) 最小的扩展
时间复杂度 \(O(n\log^2 n)\)

浙公网安备 33010602011771号