현대 미술 2

시간 제한2초메모리 제한512 MB

요약
1차원 그림이 색마다 구간 하나씩 겹쳐 칠해 만들어질 수 있는지 판정하고, 가능하면 문네트가 겹치지 않는 구간을 여러 라운드에 나눠 칠할 때 필요한 최소 라운드 수를 구한다.
난이도

보통10점 중 7점

유형
스택, 그리디, 구간, 구현
정답자
아직 제출이 없습니다

문제

평범한 2차원 그림에 싫증이 난 데다 다른 이가 자기 작품을 베끼는 데 지친 위대한 소 화가 Picowso는 더 미니멀한 1차원 화풍으로 바꾸기로 했다.

이제 Picowso의 그림은 길이가 NN (1≤N≤100 0001 \leq N \leq 100\,000)인 1차원 색 배열로 나타낼 수 있지만, 그리는 방식은 그대로다. 빈 캔버스에서 시작해 물감으로 된 "직사각형"을 차례로 겹쳐 칠하는데, 1차원에서는 이 직사각형이 곧 구간이다. 색 1,2,…,N1, 2, \ldots, N을 각각 정확히 한 번씩 쓰며, 이전과 마찬가지로 어떤 색은 마지막에 완전히 가려져 보이지 않을 수도 있다.

안타깝게도 경쟁자 Moonet은 이 1차원 그림마저 베끼는 법을 알아낸 듯하다. 방법은 앞 문제와 비슷하다. Moonet은 서로 겹치지 않는 구간 여러 개를 칠하고 마를 때까지 기다린 뒤, 다시 서로 겹치지 않는 구간 여러 개를 칠하는 과정을 되풀이한다. 한 번 칠하고 마를 때까지 기다리는 과정을 한 라운드라 한다. 전체 과정에서 Moonet은 각 색의 구간을 최대 하나만 칠할 수 있다.

Picowso의 1차원 그림이 주어질 때, Moonet이 이 그림을 베끼는 데 필요한 라운드 수를 구하여라.

입력

첫째 줄에 NN이 주어진다. 다음 NN개의 줄에는 1차원 그림의 각 칸의 색을 나타내는 00 이상 NN 이하의 정수가 하나씩 주어진다. 00은 빈 칸을 뜻한다.

출력

이 그림을 베끼는 데 필요한 최소 라운드 수를 출력한다. 이 그림이 Picowso의 진품일 수 없다면, 즉 Picowso가 색마다 구간을 하나씩 차례로 겹쳐 칠하는 방식으로는 이 그림을 그릴 수 없다면 −1-1을 출력한다.

힌트

예제에서 색 11의 구간은 색 44와 색 55의 구간보다 앞선 라운드에 칠해야 하므로 적어도 두 라운드가 필요하다.

예제1

  1. 예제 1

    입력
    7
    0
    1
    4
    5
    1
    3
    3
    
    예상 출력
    2