2025.01.27 practice
Inverse Inversions
反向逆序
\(5.00\text{s}\)
\(500.00\text{MB}\)
题面翻译
给定正整数 \(n\) 和一个整数序列 \(b_1,...,b_n\),初始值由输入给定。你需要支持下面两种操作共计 \(q\) 次:
- 修改:给定整数 \(i,x\),令 \(b_i\gets x\);
- 查询:给定正整数 \(i\)。设有 \(1\sim n\) 的排列 \(p_1,...,p_n\),满足对每个 \(1\leq k\leq n\),恰有 \(b_k\) 个 \(j\) 满足 \(1\leq j < k\) 且 \(p_j > p_k\)。你需要输出 \(p_i\) 的值。如有多解,输出任意一组解均可。
对于全部数据,\(1\leq n,q\leq 10^5\),\(1\leq i\leq n\),保证任意时刻均有 \(0\leq b_i < i\)(从而问题肯定有解)。
题目描述
你在玩长度为 \(n\) 的排列 \(p\) 时,不小心把它弄丢了,地点是在阿拉巴马的布莱尔!
幸运的是,你对这个排列有一些记忆。更具体地说,你记得一个长度为 \(n\) 的数组 \(b\),其中 \(b_i\) 是满足 \(j < i\) 且 \(p_j > p_i\) 的索引 \(j\) 的数量。
你有数组 \(b\),想要找出排列 \(p\)。但是,你的记忆并不完美,你在不断学习的过程中改变 \(b\) 的值。在接下来的 \(q\) 秒内,会发生以下情况中的一种:
- \(1\) \(i\) \(x\) — 你意识到 \(b_i\) 等于 \(x\);
- \(2\) \(i\) — 你需要找到 \(p_i\) 的值。如果有多个答案,打印任意一个。可以证明在问题的约束下总是至少存在一个可能的答案。
回答这些查询,以帮助你记住这个数组!
输入格式
第一行包含一个整数 \(n\) (\(1 \leq n \leq 10^5\))— 排列的大小。
第二行包含 \(n\) 个整数 \(b_1, b_2 \ldots, b_n\) (\(0 \leq b_i < i\))— 你对数组 \(b\) 的初始记忆。
第三行包含一个整数 \(q\) (\(1 \leq q \leq 10^5\))— 查询的数量。
接下来的 \(q\) 行包含查询,每行格式为以下两种之一:
- \(1\) \(i\) \(x\) (\(0 \leq x < i \leq n\)),表示类型 \(1\) 的查询。
- \(2\) \(i\) (\(1 \leq i \leq n\)),表示类型 \(2\) 的查询。
保证至少有一个查询是类型 \(2\) 的。
输出格式
对于每个类型 \(2\) 的查询,打印一个整数 — 查询的答案。
样例 #1
样例输入 #1
3
0 0 0
7
2 1
2 2
2 3
1 2 1
2 1
2 2
2 3
样例输出 #1
1
2
3
2
1
3
样例 #2
样例输入 #2
5
0 1 2 3 4
15
2 1
2 2
1 2 1
2 2
2 3
2 5
1 3 0
1 4 0
2 3
2 4
2 5
1 4 1
2 3
2 4
2 5
样例输出 #2
5
4
4
3
1
4
5
1
5
4
1
提示
对于第一个样例,最初只有一个可能的排列满足约束:\([1, 2, 3]\),因为它必须有 \(0\) 个逆序。
在类型 \(1\) 的查询后,数组 \(b\) 变为 \([0, 1, 0]\)。唯一生成此数组的排列 \(p\) 是 \([2, 1, 3]\)。通过这个排列,\(b_2\) 等于 \(1\),因为 \(p_1 > p_2\)。
[ARC165F] Make Adjacent
使相邻元素相等
\(2.00\text{s}\)
\(1.00\text{GB}\)
题面翻译
给定 \(n\) 和一个长度为 \(2n\) 的序列 \(a\),满足 \([1,n]\) 每个数恰好出现两次。
每一次操作可以交换相邻的两个数,询问最少多少次操作可以使得序列 \(a\) 满足 \(\forall i\in[1,n]\ a_{2\times i}=a_{2\times i+1}\)。
在保证为最小操作次数的前提下,输出所有可以得到序列中字典序最小的那一个。
对于 \(100\%\) 的数据,满足:\(1 \leq n \leq 2 \times 10^5\)。
题目描述
长度为 $ 2n $ 的整数列 $ X=(X_1,X_2,\dots,X_{2n}) $ 中,满足所有 $ i=1,2,\dots,n $ 的条件 $ X_{2i-1}=X_{2i} $ 的序列被称为 良好的数列。
现有一个长度为 $ 2N $ 的整数列 $ A=(A_1,A_2,\dots,A_{2N}) $。这个整数列中每个整数 $ i=1,2,\dots,N $ 刚好出现 $ 2 $ 次。
我们希望通过对 $ A $ 进行“交换相邻的 $ 2 $ 项”的操作(可以进行 $ 0 $ 次或更多次),将 $ A $ 变为 良好的数列。
当需要将 $ A $ 变为 良好的数列 的最小操作次数为 $ K $ 时,求通过对 $ A $ 进行 $ K $ 次操作可以得到的、字典序最小的 良好的数列。
数列的字典序是什么?一个数列 $ S\ =\ (S_1,S_2,\ldots,S_{|S|}) $ 被称为字典序小于数列 $ T\ =\ (T_1,T_2,\ldots,T_{|T|}) $,当满足以下 1. 和 2. 中至少一项时:
- $ |S|\ < |T| $ 且 $ (S_1,S_2,\ldots,S_{|S|})\ =\ (T_1,T_2,\ldots,T_{|S|}) $。
- 存在整数 $ 1\ \leq\ i\ \leq\ \min\lbrace\ |S|,\ |T|\ \rbrace $,使得下述两个条件同时成立。
- $ (S_1,S_2,\ldots,S_{i-1})\ =\ (T_1,T_2,\ldots,T_{i-1}) $
- $ S_i $ 小于 $ T_i $(从数值上)。
输入格式
输入以以下格式提供到标准输入:
$ N $ $ A_1 $ $ A_2 $ $ \dots $ $ A_{2N} $
输出格式
请以空格分隔的形式输出经过 $ K $ 次操作后得到的 良好的数列 中字典序最小的那个。
样例 #1
样例输入 #1
3
3 2 1 2 3 1
样例输出 #1
2 2 3 3 1 1
样例 #2
样例输入 #2
3
1 1 2 2 3 3
样例输出 #2
1 1 2 2 3 3
样例 #3
样例输入 #3
15
15 12 11 10 5 11 13 2 6 14 3 6 5 14 10 15 1 2 13 9 7 4 9 1 3 8 12 4 8 7
样例输出 #3
11 11 5 5 6 6 10 10 14 14 15 15 2 2 12 12 13 13 1 1 3 3 9 9 4 4 7 7 8 8
提示
约束条件
- $ 1\ \leq\ N\ \leq\ 2\ \times\ 10^5 $
- $ 1\ \leq\ A_i\ \leq\ N $
- 每个整数 $ i=1,2,\dots,N $ 在 $ A $ 中恰好出现 $ 2 $ 次
- 输入的值均为整数
示例解释 #1
例如,从 $ (3,2,1,2,3,1) $ 开始,可以通过以下步骤操作达到 良好的数列:
$ (3,2,1,2,3,1)\ \rightarrow\ (3,2,1,3,2,1)\ \rightarrow\ (3,2,3,1,2,1)\ \rightarrow\ (3,3,2,1,2,1)\ \rightarrow\ (3,3,2,2,1,1) $,总共需要 $ 4 $ 次操作。通过这 $ 4 $ 次操作,$ A $ 还可以变为 $ (2,2,3,3,1,1)$,因此答案是 $ (2,2,3,3,1,1) $。

浙公网安备 33010602011771号