아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

수열 쪼개기

시간 제한5초메모리 제한1024 MB

요약
수열을 순서를 유지한 채 K개의 연속한 부분으로 나누고, 각 부분의 서로 다른 수 개수 합의 최댓값을 구한다.
난이도

보통10점 중 6점

유형
동적 계획법, 그리디, 구현
정답자
아직 제출이 없습니다

문제

길이 NN인 수열 A_1,A_2,…,A_NA\_1, A\_2, \dots , A\_N 이 있다.

이 수열을 순서를 바꾸지 않고 KK개의 수열로 쪼갤 수 있다.

예를 들어 수열 [1, 3, 5, 7, 9]를 [1], [3, 5], [7, 9] 와 같이 3개의 수열로 쪼갤 수 있다. 하지만 [1], [3, 7], [5, 9] 와 같이 쪼갤 수는 없다.

이 때 모든 수열은 하나 이상의 수를 포함해야 하고 모든 수는 정확히 하나의 수열에 포함되어야 한다.

수열에 포함된 서로 다른 수의 개수를 수열의 가치로 정의하자.

쪼개진 수열들의 가치의 합의 최댓값을 구하시오.

입력

첫 번째 줄에 정수 NN과 KK가 공백으로 구분되어 주어진다. (1≤K≤N≤2×105)(1\leq K \leq N \leq 2\times 10^5)

두 번째 줄에 NN개의 정수 A_1,A_2,…,A_NA\_1,A\_2, \dots , A\_N이 공백으로 구분되어 주어진다. (1≤A_1,A_2,…,A_N≤N)(1\leq A\_1, A\_2, \dots , A\_N \leq N)

출력

첫 번째 줄에 쪼개진 수열들의 가치의 합의 최댓값을 출력한다.

예제2

  1. 예제 1

    입력
    5 2
    2 3 2 4 3
    
    예상 출력
    5
    
  2. 예제 2

    입력
    5 2
    2 1 1 2 2
    
    예상 출력
    4