返回首页 返回题库

数字移动

C++ 中等 GESP五级真题 #二分查找#贪心

题目描述

题面描述

小A有一个包含 个正整数的序列 ,序列 恰好包含 对不同的正整数。形式化地,对于任意 ,存在唯一一个 满足 。

小A希望每对相同的数字在序列中相邻,为了实现这一目的,小A每次操作会选择任意 ,将当前序列的第 个数字移动到任意位置,并花费对应数字的体力。

例如,假设序列 ,小A可以选择 ,将 移动到 的后面,此时序列变为 ,耗费2点体力。小A也可以选择 ,将 移动到 的前面,此时序列变为 ,花费1点体力。

小A可以执行任意次操作,但他希望自己每次花费的体力尽可能小。小A希望你能帮他计算出一个最小的 ,使得他能够在每次花费的体力均不超过 的情况下令每对相同的数字在序列中相邻。

输入格式

第一行一个正整数 ,代表序列长度,保证 为偶数。

第二行包含 个正整数 ,代表序列 。且对于任意 ,存在唯一一个 满足 , , 。

数据保证小A至少需要执行一次操作。

输出格式

输出一行,代表满足要求的 的最小值。

样例1

输入:

6
1 2 1 3 2 3

输出:

2

数据范围

对于40%的测试点,保证 。

对于所有测试点,保证 。

时间/内存限制

时间限制:1.0 s

内存限制:512.0 MB

💡 查看提示(先自己想一想再看)
考察二分查找的应用,核心思路是二分答案x:当x确定时,所有大于x的数字不能移动,必须本身已经两两相邻才能满足条件,只需验证该条件是否成立即可判断x是否可行。
⚙ 开始做这道题 0 人做过 · 0 收藏 · 7 浏览

讨论(0)