其他分享
首页 > 其他分享> > 《<遇到困难睡大觉>命题报告》学习笔记

《<遇到困难睡大觉>命题报告》学习笔记

作者:互联网

《<遇到困难睡大觉>命题报告》学习笔记

简要题意

给定 \(n,k,\{(a_i,b_i)\}_{i=1}^n\),求出 \(\max\{\min_{i=1}^n\{a_{p_i}+ik\}-\max_{i=1}^n\{b_{p_i}+ik\}|p\in \mathfrak{S}_n\}\)。\(1\leq a_i,b_i\leq 10^9,kn\leq 10^9,1\leq n\leq 10^5\)。

题解

答案等价于 \(\max\{\min_{i=1}^n\{a_i+q_ik\}-\max_{i=1}^n\{b_i+q_ik\}|q\in \mathfrak{S}_n\}\)。进一步地,可以发现答案只与排列中的相对位置有关,于是 \(q\) 可以取数轴上的任意一段连续的 \(n\) 个整点(不妨设为 \([t,t+n-1]\cap\mathbb{Z}\))而不影响答案。

考虑枚举 \(M=\max\{b_i+q_ik\}\),可以得到 \(q_i\) 的上界:\(\forall i,q_i\leq r_i=\left\lfloor\frac{M-b_i}{k}\right\rfloor\)。根据贪心策略,此时选择最大的有解的 \(t\) 一定最优。由 Hall 定理,此时 \(t=\min_{i=1}^n\{r_i-i+1\}\)。同时,注意到当 \(M\) 增加 \(k\) 时,\(r_i\) 和 \(t\) 都会增加 \(1\),于是可以只在 \([0,k-1]\) 的范围内枚举 \(M\)。

二分答案 \(mid\),枚举 \(M\in[0,k-1]\),可以得到 \(q_i\) 的上下界:\(\forall i,l_i=\max\{\left\lceil\frac{M+mid-a_i}{k}\right\rceil,t\}\leq q_i\leq r_i=\min\{\left\lfloor\frac{M-b_i}{k}\right\rfloor,t\}\)。由 Hall 定理,此时有解当且仅当不存在一个区间 \([l,r](l\leq r)\),使得 \(s(l,r)>r-l+1\),其中 \(s(l,r)\) 表示被 \([l,r]\) 包含的 \([l_i,r_i]\) 区间个数。

注意到 \(t\) 在 \(M\) 从 \(0\) 到 \(k-1\) 枚举的过程中只会增加 \(1\)(或不变),不妨设为从 \(t'\) 变为 \(t'+1\),变化的时间为 \(tt\)(若不变,则为 \(\infty\))。接下来,只需要分别对 \(M\in[0,tt-1],t=t'\) 与 \(M\in[tt,k-1],t=t'+1\) 分别判断即可。

考虑对 \(M\in[L,R]\) 和确定的 \(t\) 进行判断。注意到 \(R-L+1<=k\),于是 \(l_i,r_i\) 在 \(M\) 从 \(L\) 到 \(R\) 枚举的过程中只会增加 \(1\)(或不变),不妨分别设为从 \(l_i',r_i'\) 变为 \(l_i'+1,r_i'+1\),变化的时间为 \(tl_i,tr_i\)(若不变,则为 \(\infty\))。

对 \(r_i\) 进行排序。记 \(q(i,j)=r_j-l_i+1-s(l_i,r_j)\),那么有解当且仅当不存在 \(i<j\) 使得 \(q(i,j)<0\)。注意到 \(l_i\) 之间、\(r_i\) 之间的相对顺序不会改变,于是 \(s(l_i,r_j)\) 不会改变。那么只需要对 \(q'(i,j)=r_j'-l_i'+1-s(l_i,r_j)\) 进行分类讨论:

注意到固定 \(j\) 时,同种限制取最小的 \(tl_i\) 一定最紧。于是可以从小到大枚举 \(r_j'\),用线段树维护 \(q'(i,j)\) 的最小值和次小值以及此时分别对应的最小的 \(tl_i\)(这样当不存在 \(q'(i,j)<-1\) 的情况时能得到所有限制)。

最终会得到 \(O(n)\) 个限制,对于 \(q'(i,j)=-1\) 得到的限制可以轻松求出它们的交,然后将 \(q'(i,j)=0\) 得到的限制排序后和前面求得的交进行对称差判断即可。

时间复杂度 \(O(n\log n\log A)\),其中 \(A\) 是答案的值域大小(此题中为 \(2\times10^9\))。

标签:min,max,命题,笔记,当且,学习,leq,ik,枚举
来源: https://www.cnblogs.com/Y25t/p/15344543.html