【20181024T3】小C的宿舍【分治】
【错解】
好像就是\(|i-j|+|a_i - b_i|\)唉
嗯开始都加i-1,跑一遍,1(i-1)加1,in 减1,线段树维护。
过样例了呢
哎大样例怎么多了那么多啊
跑了个暴力,多得更多啊(雾
是不是数据有问……
woc好像有下去再上来的情况
打个暴力滚粗,30pts
【正解】
考虑分治
每次取mid递归
设
\[ mn_{x}=\left\{
\begin{aligned}
min _{i=x}^{mid} \{h_{i}\} \qquad x \leq mid\\
min _{i=mid+1}^{x} \{h_{i}\} \qquad x > mid
\end{aligned}
\right.
\]
我们考虑i,j在mid两边。i,j的距离相当于\(h_i + h_j +j-i -2min\{mn[i],mn[j]\}\)
即我们要求\(h_i + h_j +j-i -2min\{mn_i,mn_j\} \leq k\)的点对数
挪一下就可以得到4个不等式
min看着很碍眼,考虑消掉
我们可以吧mn排序,这样前面的mn一定大/小于后面的,即在前面mn和在后面的mn比较时一定前一个较大/小
这样可以用平衡树/权值线段树/树状数组/二分查找(大雾)
然后分四种情况就可以了
复杂度\(O(Nlog_N^2)\)