CF1375H Set Merging

题目描述

给定一个长度为 $n$ 的排列 $a_1, a_2, \dots, a_n$,其元素为 $1$ 到 $n$ 的所有整数。你还有 $n$ 个集合 $S_1,S_2,\dots, S_n$,其中 $S_i=\{a_i\}$。此外,还有一个变量 $cnt$,表示当前集合的数量。初始时,$cnt = n$。 我们定义两种集合上的函数: $f(S)=\min\limits_{u\in S} u$; $g(S)=\max\limits_{u\in S} u$。 你可以通过合并两个集合 $A$ 和 $B$ 得到一个新集合,当且仅当 $g(A)

输入格式

第一行包含两个整数 $n,q$,$(1\leq n \leq 2^{12},1 \leq q \leq 2^{16})$,分别表示排列的长度和需求的数量。 第二行包含 $n$ 个整数 $a_1,a_2,\cdots,a_n$,$(1\leq a_i\leq n$,$a_i$ 互不相同),表示给定的排列。 接下来的 $q$ 行,每行包含两个整数 $l_i,r_i$,$(1\leq l_i\leq r_i\leq n)$,描述第 $i$ 个需求。

输出格式

保证在给定约束下存在解。 第一行输出一个整数 $cnt_E$,$(n\leq cnt_E\leq 2.2\times 10^6)$,表示所有操作完成后集合的总数。 接下来 $cnt_E-n$ 行,每行输出两个整数 $u$、$v$,$(1\leq u, v\leq cnt'$,其中 $cnt'$ 是本次操作前的 $cnt$ 值),表示你选择 $S_u$ 和 $S_v$ 并进行合并操作。每次操作需满足 $g(S_u)

说明/提示

在第一个样例中: 初始时有 $S_1=\{1\},S_2=\{3\},S_3=\{2\}$。 第一次操作,因为 $g(S_3)=2