#ds603. Partition Game

Partition Game

Partition Game

Problem Source

Codeforces Round #721 (Div. 2) E

Problem Description

You are given an array aa of nn integers. Define the cost of some array tt as follows:

cost(t)=∑x∈set(t)last(x)−first(x),cost(t) = \sum_{x\in set(t)} last(x) - first(x),

where set(t)set(t) is the set of all values in tt without repetitions, and first(x)first(x) and last(x)last(x) are the indices of the first and last occurrence of xx in tt, respectively. In other words, we compute the distance between the first and last occurrences for each distinct element and sum them up.

You need to split the array aa into kk consecutive segments such that each element of aa belongs to exactly one segment and the sum of the cost of individual segments is minimized.

Input Format

The first line contains two integers n,kn, k (1≤n≤35000, 1≤k≤min⁡(n,100)1\leq n\leq 35000,\ 1\leq k\leq \min(n, 100)).

The second line contains nn integers a1,a2,…,ana_1, a_2, \dots, a_n (1≤ai≤n1\leq a_i\leq n).

Output Format

Output the minimum sum of the cost of individual segments.

Sample Input 1

7 2
1 6 6 4 6 6 6

Sample Output 1

3

Sample Input 2

7 4
5 5 5 5 2 3 3

Sample Output 2

1

Sample Explanation

In the first example, we can divide the array into [1,6,6,4][1,6,6,4] and [6,6,6][6,6,6]. The cost of [1,6,6,4][1,6,6,4] is (1−1)+(3−2)+(4−4)=1(1-1)+(3-2)+(4-4)=1 and the cost of [6,6,6][6,6,6] is 3−1=23-1=2. The total cost is 1+2=31+2=3.

In the second example, divide the array into [5,5],[5],[5,2,3][5,5], [5], [5,2,3] and [3][3]. The total cost is 1+0+0+0=11+0+0+0=1.