1 条题解

  • 0
    @ 2026-9-3 10:52:19

    题解

    思路

    任意双调排列的峰值必然是 nn。选定峰值左侧出现的值集合 L⊆{1,…,n−1}L\subseteq\{1,\ldots,n-1\} 后,排列被唯一确定:LL 升序、然后是 nn、剩余元素降序。双调峰值不得在两端,所以 1≤∣L∣≤n−21\le |L|\le n-2。

    设 cv=∣L∩[1,v]∣c_v=|L\cap[1,v]|。值 v<nv<n 在排列中的位置为

    $$pos(v)=\begin{cases}c_v,&v\in L,\\1+n-v+c_v,&v\notin L.\end{cases}$$

    而 pos(n)=∣L∣+1pos(n)=|L|+1。

    做法

    子任务 1 枚举 1…n1\ldots n 的全排列,检查双调性与两个固定位置。

    子任务 2 枚举 LL 的所有子集,按上式计算 x,yx,y 的位置。

    满分做法枚举 xx 和 yy(若小于 nn)是否属于 LL。固定归属后,上式直接给出处理到 xx 或 yy 时已选元素数的要求。按数值从 11 到 n−1n-1 做选/不选 DP,在两个检查点只保留所需选取数的状态。最后若 x=nx=n 或 y=ny=n,再检查 ∣L∣+1|L|+1 是否等于相应位置。

    复杂度

    满分算法时间复杂度 O(n2)O(n^2),空间复杂度 O(n)O(n)。

    • 1

    信息

    ID
    1341
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者