C. 序列修改

内存限制:512 MiB 时间限制:2000 ms 输入文件:sequence.in 输出文件:sequence.out
题目类型:传统 评测方式:文本比较

题目描述

定义一个长度为 n 的序列 a_1,a_2,…,a_n 的频度序列为序列 c_1,c_2,…,c_n ,其中 c_i 表示 a_1,a_2,…,a_i 中不同的数的个数。定义一个序列的代价为

w(a)=\sum_{i=1}^n{i×c_i}

你可以修改序列中至多一个数字,而修改任意一个数字,都需要付出修改前后的差的绝对值的代价。

请你最小化新序列的代价与付出代价的总和。

输入格式

从文件 sequence.in 中读入数据。

第一行一个整数 n ,表示序列长度。

第二行 n 个整数 a_1,a_2,…,a_n ,表示原序列。

输出格式

输出到文件 sequence.out 中。

一个整数,表示最小代价。

样例

样例输入

4 
1 2 3 4

样例输出

22

数据范围与提示

subtask 1 15pts: n≤500

subtask 2 20pts: n≤5000

subtask 3 25pts: n≤10^5

subtask 4 20pts: n≤3×10^5

subtask 5 20pts:无特殊限制;

对于所有数据, 1≤n≤5×10^5 1≤a_i≤10^9