C:天气之子
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

在一个古老的部落里,有一个关于天气之子的试炼。

试炼会给出连续 n 天的天气情况,每种天气用一个正整数表示,相同的整数表示同一种天气。

每一天开始之前,参加试炼的成员都必须给出当天的天气预报。预报准确率最高的人将成为部落的天气之子。

你想出了一个奇妙的预报方法:

1. 第一天:预报天气为 <天气类型 1>。
2. 从第二天开始:

* 如果前一天预报成功,则当天的预报保持不变。
* 如果前一天预报失败,则:

1. 统计之前所有天中出现次数最多的天气类型;
2. 如果有多种天气出现次数相同且最多,则从出现次数相同的天气中选择 第一次出现时间最晚 的天气;(具体可以看样例解释)
3. 将当天的预报修改为该天气类型。

请你计算:按照该策略进行预报,最终能够预报成功的天数。

输入描述:

第一行输入一个正整数 n,表示进行天气预测的天数。

第二行输入 n 个正整数 a_1,a_2,\dots,a_n,其中 a_i 表示第 i 天的实际天气类型。相同的正整数表示相同的天气。

输出描述:

输出一行一个整数,表示 预测成功的天数
示例1

输入

复制
5
1 2 1 2 2

输出

复制
2

说明

1 天:预测 1

2 天:由于前一天预测正确,继续预测 1

3 天:由于前一天预测错误,统计前两天出现次数最多的天气,结果为 1,2。由于 2 的第一次出现时间为第 2 天,比 1 的第一次出现(第 1 天)更晚,因此预测 2

4 天:由于前一天预测错误,统计前三天出现次数最多的天气,此时天气 1 出现 2 次,为最多,因此预测 1

5 天:由于前一天预测错误,统计前四天出现次数最多的天气,结果为 1,2。由于 2 的第一次出现时间为第 2 天,比 1 的第一次出现(第 1 天)更晚,因此预测 2

因此答案为 2
示例2

输入

复制
2
3 3

输出

复制
1

备注:

对于 20\% 的数据:1 \le n \le 10

对于 50\% 的数据:1 \le n \le 10^3

对于 100\% 的数据:1 \le n \le 10^61 \le a_i \le 10^5