2025.2.7 做题记录

P4747 [CERC2017] Intrinsic Interval

对于每个区间 \([l,r]\),找到最小的区间 \([a,b]\),使得 \(a \le l \le r \le b\),且 \(\max\limits_{i=a}^{b}p_i -\min\limits_{i=a}^{b}p_i = b-a\)

考虑分治。那么就可以维护出:

  1. 最大值最小值同侧。此时另一边的下标一定。这样会拆出来 \(O(n)\) 个区间。时间复杂度 \(O(q\log n)\)
  2. 最大值最小值不同侧。假设 \(\max\)\(l\) 这边,\(\min\)\(r\) 这边。那么 \(r+\min=l+ \max\)。如果我们枚举的 \(l\),此时 \(l + \max\) 是定值。暴力枚举跨区间的询问。变成查询是否在区间 \([a,b]\) 中存在 \(r+\min =x\)。最坏 \(O(nq)\)

最坏时间复杂度 \(O(nq)\)。但是原题能过。

P11458 [USACO24DEC] All Pairs Similarity P

\[\frac{\operatorname{popc}(a \operatorname{AND} b)}{\operatorname{popc}(a \operatorname{OR} b)}=\frac{1}{\operatorname{popc}(a \operatorname{OR} b)}\sum\limits_{x=0}^{n-1}[(a \operatorname{AND} b)_{2,x}=1] \]

对于每个 \(i\),我们求出 \(\operatorname{popc}(a \operatorname{OR} b) =x\) 时,所有 \({\operatorname{popc}(a \operatorname{AND} b)}\) 的和。枚举二进制下第 \(i\) 位,那么就是看有多少个 \(b\),满足:

  1. \(b\) 二进制下第 \(y\) 位为 \(1\)
  2. \(\operatorname{popc}(a \operatorname{OR} b) =x\)

换个思路。

\[\frac{\operatorname{popc}(a \operatorname{AND} b)}{\operatorname{popc}(a \operatorname{OR} b)}=\frac{\operatorname{popc}(a)+\operatorname{popc}(b)-\operatorname{popc}(a\operatorname{OR} b)}{\operatorname{popc}(a \operatorname{OR} b)}=\operatorname{popc}(a)\times \sum\frac{1}{\operatorname{popc}(a \operatorname{OR} b)}+\sum \frac{\operatorname{popc}(b)}{\operatorname{popc}(a \operatorname{OR} b)}-n \]

那么我们需要求 \(\sum \frac{\operatorname{popc}(b)}{\operatorname{popc}(a \operatorname{OR} b)}\) 这类东西。

考虑 mtinmid。对于 \(a\),枚举 \(b\) 的一半。时间复杂度 \(O(2^{\frac{n}{2}})\)。此时能够知道前面一半的 \(\operatorname{popc}\)。对于 \(b\),枚举 \(a\) 的前一半。时间复杂度 \(O(2^{\frac{n}{2}})\)。此时能够知道后一半的 \(\operatorname{popc}\)。那么这样可以做到 \(O(n2^{\frac{n}{2}-1})\)。总时间复杂度 \(O(Nn2^{\frac{n}{2}-1})\)

posted @ 2026-02-11 21:43  harmis_yz  阅读(3)  评论(0)    收藏  举报