#HK5443. 「ROI 2013 Day 2」星际之旅

「ROI 2013 Day 2」星际之旅

题目描述

译自 ROI 2013 Day2 T1. Звёздный путь

一支探险队正准备乘坐新一代宇宙飞船启程,计划依次访问星系中的 NN 颗行星,从地球到胜利星。行星按访问顺序编号为 11NN,其中地球编号为 11,胜利星编号为 NN

飞船在行星之间飞行时可以使用星系中存在的任何类型燃料。探险开始前,飞船位于地球,燃料箱为空。燃料类型以整数编号,在编号为 ii 的行星上只能加注类型为 aia_i 的燃料。到达第 ii 颗行星时,可以选择加注燃料,此时会清空燃料箱中现有的燃料,并加满类型为 aia_i 的燃料。

每颗行星的加油站设置了特定规则,每次加注的燃料量恰好足够飞到下一颗提供相同类型燃料的行星。如果在后续行星中不再有提供该类型燃料的行星,则无法在当前行星加注燃料。也就是说,在第 ii 颗行星加注后,燃料足够访问从第 (i+1)(i + 1) 颗到第 jj 颗行星(包括第 jj 颗),其中 jj 是大于 ii 的最小行星编号,且满足 aj=aia_j = a_i。若要继续探险至第 jj 颗行星之后,则需在这些行星中的某颗上再次加注燃料。

你需要编写一个程序,根据各行星提供的燃料类型,计算完成探险所需的最小加注次数。

输入格式

输入文件的第一行包含一个整数 NN (2N300000)(2 \leq N \leq 300000),表示行星的数量。

第二行包含 NN 个整数 a1,a2,,aNa_1, a_2, \ldots, a_N (1ai300000)(1 \leq a_i \leq 300000),表示各行星上提供的燃料类型。

输出格式

输出文件的第一行应包含一个整数 KK,表示完成探险所需的最小加注次数。

第二行应包含 KK 个以空格分隔的整数,表示需要加注燃料的行星编号。行星编号需按加注时间顺序输出。

如果存在多种具有最小加注次数的方案,可以输出任意一种。如果不存在解决方案,则输出唯一的数字 00

7
1 3 2 1 3 2 3

3
1 3 5

7
4 3 2 4 3 2 1

0

数据范围与提示

详细子任务附加限制及分值如下表所示:

子任务 分值 附加限制
11 5050 N3000N \leq 3000
22 5050 N300000N \leq 300000