n 不超过 3×103,可以直接模拟。用数组 a[1..n] 保存当前序列,并用布尔表 f[i][j] 记录编号 i 是否在位置 j 出现过。初始时 f[i][i]=true。
对每次操作 [l,r]:把 a[l..r] 暂存,再把 a[r+1..n] 依次前移到从 l 开始的位置,最后把暂存片段接到末尾。这等价于把区间 [l,r] 挪到当前序列尾部。因为只有位置 l 到 n 可能变化,更新 f 时只需扫描这一段。
全部操作结束后,对每个编号统计 f[i][1..n] 中真值的个数。
一条传送带上有 n 个包裹,编号依次为 1,2,…,n。初始时第 i 个位置恰好放着编号为 i 的包裹,因此初始序列为
[1,2,…,n]接下来进行 q 次调度。每次给出一个区间 [l,r],工作人员会把当前位于第 l 到第 r 个位置上的包裹整体取出,并在保持它们原有相对顺序不变的前提下,将它们依次接到当前序列的末尾。
请统计从初始状态开始,到全部 q 次操作完成为止,每一个编号的包裹一共曾经出现在多少个不同的位置上。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册