做题记录 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)\)

代码

参考

posted @ 2026-03-22 06:48  Hstry  阅读(1)  评论(0)    收藏  举报