CF1443E Long Permutation

题目描述

一个排列是一个长度为 $n$ 的整数序列,包含从 $1$ 到 $n$ 的每个数字且每个数字恰好出现一次。例如,$[1]$、$[4, 3, 5, 1, 2]$、$[3, 2, 1]$ 都是排列,而 $[1, 1]$、$[4, 3, 1]$、$[2, 3, 4]$ 不是排列。 如果两个长度相同的排列 $a$ 和 $b$,在第一个不同的位置 $i$ 满足 $a[i] < b[i]$,则称排列 $a$ 字典序小于排列 $b$。例如,排列 $[1, 3, 2, 4]$ 字典序小于排列 $[1, 3, 4, 2]$,因为前两个元素相等,第三个元素第一个排列更小。 对于长度为 $n$ 的排列 $a$,它的下一个排列是长度为 $n$ 的、字典序大于 $a$ 的最小排列。例如: - 对于排列 $[2, 1, 4, 3]$,下一个排列是 $[2, 3, 1, 4]$; - 对于排列 $[1, 2, 3]$,下一个排列是 $[1, 3, 2]$; - 对于排列 $[2, 1]$,不存在下一个排列。 给定一个整数 $n$,初始排列为 $a = [1, 2, \ldots, n]$,即 $a[i] = i$($1 \le i \le n$)。 你需要处理 $q$ 个操作,操作有两种类型: - $1\ l\ r$:查询区间 $[l, r]$ 上所有元素的和。更正式地说,需要计算 $a[l] + a[l+1] + \ldots + a[r]$。 - $2\ x$:将当前排列替换为它的下一个排列,重复 $x$ 次。例如,如果 $x=2$ 且当前排列为 $[1, 3, 4, 2]$,则执行如下变化链 $[1, 3, 4, 2] \rightarrow [1, 4, 2, 3] \rightarrow [1, 4, 3, 2]$。 对于每个 $1$ 型操作,输出所需的区间和。

输入格式

第一行包含两个整数 $n$($2 \le n \le 2 \times 10^5$)和 $q$($1 \le q \le 2 \times 10^5$),分别表示初始排列的长度和操作数。 接下来的 $q$ 行,每行表示一个操作。$1$ 型操作包含三个整数 $1\ l\ r$($1 \le l \le r \le n$),$2$ 型操作包含两个整数 $2\ x$($1 \le x \le 10^5$)。 保证所有 $2$ 型操作都可以被执行。

输出格式

对于每个 $1$ 型操作,输出一行一个整数,表示所求的区间和。

说明/提示

初始排列为 $[1, 2, 3, 4]$。操作过程如下: 1. $2 + 3 + 4 = 9$; 2. $[1, 2, 3, 4] \rightarrow [1, 2, 4, 3] \rightarrow [1, 3, 2, 4] \rightarrow [1, 3, 4, 2]$; 3. $1 + 3 = 4$; 4. $4 + 2 = 6$。 由 ChatGPT 4.1 翻译