2 条题解

  • 0
    @ 2026-4-30 16:34:12
    • 数形结合,定义域值域互换,数据随机题。

    考虑放到二维平面上刻画该问题,那么就是有若干点 (i,ai)(i,a_i),我们要求对于任意横坐标 [l,r][l,r] 的最小子矩形而言,就要求 (l,al),(r,ar)(l,a_l),(r,a_r) 这两个点至少一个在矩形的四个角上。先不管数据随机的限制,用记忆化搜索的思路我们思考如何生成一个合法序列,记当前还未填写的数是集合 SS,当前仍未填写的区间是 [L,R][L,R],那么你每次是将 Smax,SminS_{\max},S_{\min} 的两者之一放到端点上,那么 [L,R][L,R] 就缩减为 [L,R1]/[L+1,R][L,R-1]/[L+1,R],而 SS 由于是删除最小或者最大值那么显然是连续的。也就是说对于大正方形你每次会删除一个 L\texttt{L} 形。因此有一个 O(n3)\mathcal O(n^3) 的状态设计就是,fl,r,xf_{l,r,x} 为当前为 [l,r][l,r] 的区间时 [x,x+rl][x,x+r-l] 还未填写,这些所有序列与原序列的保留最大值。

    注意到数据随机,猜测答案很大,事实上保留的数的级别是 O(n)\mathcal O(\sqrt n)。考虑“保留”是什么意思,对于 ii 有四个方向的正方形其边长为 dd,那么就有 (i,ai)(i,a_i) 往四个方向的正方形。我们考察被保留下来的 kk 个点,那么就是要对于所有被保留的点,考虑一个严格单调的序列 dd 以及方向 dirdir 来刻画其正方形。我们要求对于这 kk 个正方形是两两严格包含的关系。

    那么这样就很好做了。我们放到一个正方形上去分析,但之前我们宣称了答案的量级很小,原本是 fi,dir,jf_{i,dir,j} 表示 (i,ai)(i,a_i) 的第 dirdir 方向的正方形边长为 jj 时最多包含多少个子正方形,显然其具有单调性,因此考虑定义域值域互换。可以更改为 gi,dir,jg_{i,dir,j} 表示 (i,ai)(i,a_i)dirdir 方向正方形,如果包含 j\ge j 个子正方形,其要求最小的边长是 gi,dir,jg_{i,dir,j}。考虑对于 jj 维度进行扫描线,因为转移就是 g,jg_{*,j}g,j1g_{*,j-1} 来转移。然后这就是一个二维平面的问题,可以用对角线拆成两个三角形,树状数组维护二维偏序做一下。时间复杂度 O(nnlogn)\mathcal O(n\sqrt n\log n)O(n)\mathcal O(\sqrt n) 的分析来自于随机序列的最长上升子序列期望长度。

    只需要跑 88 次二维偏序就行了。优美的写法是每次旋转一下坐标系,但我不会。

    提交记录。

    • 0
      @ 2026-4-30 16:32:41

      考虑一个重排后的排列应该长什么样子,不妨固定住一对 l,rl,r 满足 l<rl<r,要求就是不能同时存在 l<k1,k2<rl<k_1,k_2<r 使得 pk1<min(pl,pr)p_{k_1}<\min(p_l,p_r)pk2>max(pl,pr)p_{k_2}>\max(p_l,p_r),换句话说也就是 pl,prp_l,p_r 里至少要有一个是区间 [l,r][l,r] 的最值。

      换个角度看,假设一开始有 11nn 这些数,要把它们排成一个合法的排列,就要求每次必须把当前的最大值/最小值插到当前没被插入数的最靠前/最靠后的位置,排列合法当且仅当每一步都满足这个条件,而我们希望最大化插入过程中与原排列重合的位置数量。

      然后就有个暴力的区间 dp 做法,可以设 fl,r,xf_{l,r,x} 表示区间 [l,r][l,r] 以外的部分已经填完,当前剩下的最大值为 xx 时区间内最大的重合位置数量,转移直接枚举在左右端点填最大/最小值四种情况是 O(1)O(1) 的,所以得到了一个 O(n3)O(n^3) 的做法,可以通过 7070 分。

      继续优化,考虑在二维平面的角度上看这个问题。因为新排列一个区间内的数在值域上肯定是连续的,把 pip_i 看成平面上的点 (i,pi)(i,p_i),那么对于 pp 的一个区间 [l,r][l,r] 能包住区间内的点的最小矩形就是 x[l,r],y[d,u]x\in[l,r],y\in[d,u] 的这么一个矩形,其中 d,ud,u 分别是区间内的最小值和最大值。而因为每次只会填左右端点的一个最值, 那么填完之后剩下的子区间对应的矩形 u,du,d 的变化量只有 11,也就是说每次会删去当前矩形边缘的一个 L 形。而初始时整个排列对应的矩形显然是 x[1,n],y[1,n]x\in[1,n],y\in[1,n] 这么个大正方形,所以每个区间对应的矩形也都应当是个正方形。

      对于一个 pip_i 来说,它与新的排列重合相当于是 (i,pi)(i,p_i) 作为了某个区间对应正方形的四个顶点之一。考虑到所有以 (i,pi)(i,p_i) 为顶点的正方形其对应的另一个顶点坐标都形如 (i±len,pi±len)(i\pm len,p_i\pm len)(正负号对应了四个方向),对每个 (i,pi)(i,p_i) 都把这种正方形找出来,发现问题其实可以转化为:平面内有 O(n2)O(n^2) 个正方形,你需要选择尽可能多的正方形使得它们之间是严格包含的关系。这是因为对于选出来的这些正方形,因为只有包含关系,我们一定能构造出一组方案使得这些正方形同时出现过,每出现过一个就多一个位置不需要交换,所以答案就是 nn 减去最多选出的正方形个数。

      fi,j,dirf_{i,j,dir} 表示 (i,pi)(i,p_i)dirdir 方向延伸出的长度为 jj 的正方形(dir{0,1,2,3}dir\in\{0,1,2,3\}),最多包含几个其它的正方形,转移考虑从满足 k<i&l<jk<i\And l< jfk,l,f_{k,l,*} 转移,分类讨论不同方向之间的正方形成包含关系的条件,能够把转移限制表示成二维偏序,这个 dp 能够做到 O(n2logn)O(n^2\log n),但是本身 nn80008000 而且常数太大了肯定过不去。

      发现题目里还有随机排列的条件没有用,可以感受到随机排列的情况下能够选出的正方形不会太多,改成设 fi,j,dirf_{i,j,dir} 表示 (i,pi)(i,p_i)dirdir 方向的正方形要包含 jj 个其它的正方形,最小的边长是多少,转移同样可以分类讨论变成二维偏序。一个结论就是 jj 这一维的大小是 O(n)O(\sqrt n) 级别的,大概就是与随机排列的 LIS 长度是同阶的,所以这样就能做到 O(nnlogn)O(n\sqrt n\log n),可以通过。

      这里补充下具体怎么把转移写成二维偏序,假设我们现在要对 fi,j,0f_{i,j,0} 进行转移,考虑之前 j=j1j'=j-1 时的一个矩形 x[l,r],y[d,u]x\in[l,r],y\in[d,u],那么首先要满足的条件就是 i<li<lpi<dp_i<d,转移过来后正方形的长度当 dpilid-p_i\le l-i 也就是 dlpiid-l\le p_i-i 的时候是 rir-i,否则是 upiu-p_i。注意到,如果满足 i<li<l 那么当 dpi>lid-p_i> l-i 时就天然满足了 pi<dp_i<d,同理如果满足 pi<dp_i<d 那么当 dpilid-p_i\le l-i 的时候也天然满足了 i<li<l,因此转移的贡献也是可以确定住的,跑两遍二维偏序即可。对于 dirdir 为其它数的情况可以类似的讨论处理,这样对每层 jj 转移是跑八遍二维偏序,比较唐,但是我也不会其它更好的做法。

      代码是贺的,不放了。

      • 1

      信息

      ID
      7274
      时间
      7000ms
      内存
      1024MiB
      难度
      10
      标签
      递交数
      1
      已通过
      1
      上传者