1 条题解

  • 0
    @ 2025-8-24 22:36:21

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar cyffff
    Not yet for the story on the last page, it's not the end.

    搬运于2025-08-24 22:36:21,当前版本为作者最后更新于2022-02-15 18:46:10,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    Link\text{Link}

    Update2024.8.16\text{Update2024.8.16}:大幅度修改,优化表述。

    题意

    给你一个 nn 阶排列 pp,任选一个起始点,走 m1m-1 步,并将走过的所有数按走到的顺序写下,形成一个长度为 mm 的序列。求出所有以上面的方法生成的序列中字典序第 kk 小的序列的所有元素的和。

    n2×107n\le2\times 10^7m,k1018m,k\le10^{18}

    思路

    先特判掉 n2n\le 2 的情况,接下来默认 n3n\ge 3

    fi,jf_{i,j} 表示从 ii 出发走 jj 步的方案数,转移显然。按 pip_i 从小到大枚举起始点,如果 fi,m1<kf_{i,m-1}<k 则将 kk 减去 fi,m1f_{i,m-1},否则我们就确认了起始点为 ii 即序列第一位为 pip_i。接下来的每一步也是类似的,对第 ii 步,不妨设现在在 xxpx1<px+1p_{x-1}<p_{x+1},则判断 fx1,mif_{x-1,m-i}kk 的大小关系即可。

    时间复杂度 O(nm)O(nm),无法通过。

    fi,jf_{i,j} 的值可能很大,而 k1018k\le 10^{18} 且我们只需要比较 fi,jf_{i,j}kk 的大小关系。于是当 fi,jkf_{i,j}\ge k 时,不妨令 fi,j=+f_{i,j}=+\infty。注意到 j2logkj\ge 2\log kfi,jf_{i,j} 必然为 ++\infty(这个下界只在 n=3n=3 时取到)。令 c=2logkc=2\log k,可以发现除了最后 cc 步需要决策,其余全部向相邻位置中较小的走。

    考虑前面的部分,一定是走到某个地方开始在 iii+1{i+1} 之间反复走。所以我们可以 O(n)O(n) 走完前面的步数,最后 cc 步按照决策来走。

    时间复杂度 O(nlogk)O(n\log k),无法通过,瓶颈仍在计算所有 fi,jf_{i,j}

    继续优化 fi,jf_{i,j} 的预处理。由于我们只需要求走不超过 cc 步的方案数,所以如果 c<i<ncc<i<n-c,则 iicc 步的过程中不可能碰到边界,即 fi,j=2jf_{i,j}=2^j。于是我们只需要求 ici\le cinci\ge n-c 的这 O(logk)O(\log k) 个位置的 fi,jf_{i,j} 即可。

    时间复杂度 O(n+log2k)O(n+\log^2k),可以通过。

    • 1

    信息

    ID
    7329
    时间
    2000ms
    内存
    256MiB
    难度
    6
    标签
    递交数
    0
    已通过
    0
    上传者