前几天看到一个看起来挺牛的数据随机下区间点对最优化的做法,没想到还真用上了。好像和官方题解不太一样,先记录一下。
题意是区间查询平面最近哈密顿距离点对。
先考虑一下全局查询怎么做。我们充分发扬人类智慧,每个点按 \(a\) 排序,然后从小到大枚举每个点,找下标距离它不超过 \(B\) 的点计算距离。事实表明取 \(B=20\) 就基本能算出最短距离了。复杂度 \(O(nB)\)。
然后考虑区间查询怎么做。考虑分治,假设当前分治区间 \([l,r]\),我们处理所有 \([l',r']\subseteq[l,r]\) 的询问。那么我们求出 \([l,r]\) 的最近点对 \([p,q]\),显然对于任意询问 \([l',r']\) 如果满足 \(l'\le p\le q\le r'\),那么答案显然就是 \(d(p,q)\)(\(d(x,y)\) 表示 \(x,y\) 的距离);否则 \([l',r']\) 要么属于区间 \([l,q]\),要么属于区间 \([p,r]\),直接分治下去计算答案(属于 \([p,q]\) 的部分随便选一边)即可。
加上小区间询问暴力平衡之后,理论复杂度似乎是 \(O(n^{1.4}B)\) 的。偷懒所以没加。
下面是坐标和询问区间均随机生成的复杂度证明(不带暴力平衡),不太严谨,理性愉悦即可:
由于询问一个长度为 \(l\) 的区间的概率为 \(\frac{l^2}{n^2}\),那么期望一个区间内的询问次数 \(\le \frac{l^2q}{n^2}\)。这里认为 \(n,q\) 同阶,那么 \(l\le \sqrt n\) 时我们就可以认为不会再向下分治了。
由于分治一层单个区间长度期望乘 \(\frac{2}{3}\),那么设期望递归层数为 \(t\),那么:
\[\left(\frac{2}{3}\right)^tn=\sqrt n \]\[t=O(\log \sqrt n) \]而递归一层之后所有区间的长度总和会乘 \(\frac{4}{3}\),所以:
\[T=\sum\limits_{i=0}^{t}\left(\frac{4}{3}\right)^t\cdot nB=O(Bn\sqrt n) \]当然这个上界是远远达不到的,实测这个根号跑得和 \(\log\) 差不多快。
标签:le,frac,询问,分治,sqrt,计算,几何,区间 From: https://www.cnblogs.com/Ender32k/p/18531034