CF620C Pearls in a Row
题目描述
有 $n$ 颗珍珠排成一行。我们用整数从 $1$ 到 $n$ 从左到右对它们编号。第 $i$ 颗珍珠的类型为 $a_{i}$。
我们称一段连续的珍珠为一个区间。如果该区间内至少有两颗相同类型的珍珠,则称其为“好区间”。
请将珍珠的排列划分成最多个好区间。注意:每颗珍珠必须恰好属于一个区间。
由于输入/输出数据量可能很大,建议使用高效的输入输出方式:例如,C++中建议使用 scanf/printf 代替 cin/cout,Java 中建议使用 BufferedReader/PrintWriter 代替 Scanner/System.out。
输入格式
第一行包含一个整数 $n$($1 \le n \le 3 \cdot 10^{5}$),表示珍珠的数量。
第二行包含 $n$ 个整数 $a_{i}$($1 \le a_{i} \le 10^{9}$),表示第 $i$ 颗珍珠的类型。
输出格式
第一行输出一个整数 $k$,表示分割获得的好区间的最大数量。
接下来的 $k$ 行,每行输出两个整数 $l_{j}, r_{j}$($1 \le l_{j} \le r_{j} \le n$),表示第 $j$ 个区间中最左和最右珍珠的编号。
注意,你需要输出正确的区间划分方案,使每颗珍珠恰好属于一个区间且每个区间都含有两颗相同类型的珍珠。
如果存在多种最优方案,可以输出任意一种。区间输出的顺序不限。
如果无法将珍珠划分成符合要求的区间,输出 -1。
说明/提示
由 ChatGPT 5 翻译