만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

영화

시간 제한1초메모리 제한256 MB

요약
메인 목록에서 최고와 최저 영화를 번갈아 보고 보조 목록에서 영화를 채워 넣어, 메인 목록이 정렬될 때까지의 최소 단계를 구합니다.
난이도

어려움10점 중 8점

유형
그리디, 시뮬레이션, 세그먼트 트리
정답자
아직 제출이 없습니다

문제

영화 감상은 복잡합니다. 가지고 있는 영화를 두 목록으로 나눕니다.

  • 주 목록: NN편의 영화
  • 보조 목록: KK편의 영화

영화는 모두 N+KN + K편이며, 각 영화에는 {1,2,…,N+K}\{1, 2, \ldots, N + K\}에 속한 서로 다른 정수 평점이 하나씩 있습니다.

다음 알고리즘에 따라 영화를 봅니다.

  • 매 단계마다 주 목록에서 영화 하나를 골라 봅니다. 본 영화는 주 목록에서 빠집니다.
  • 고르는 영화는 주 목록에 남은 영화 중 최악의 영화와 최고의 영화를 번갈아 골라야 합니다. 첫 번째로 고르는 영화는 최고의 영화입니다. 평점이 가장 낮은 영화가 최악, 가장 높은 영화가 최고입니다.
  • 영화를 본 뒤에는 보조 목록에서 영화 하나를 골라 주 목록의 원하는 위치에 넣습니다. 보조 목록이 비면 영화 보기를 멈춥니다. 주 목록의 영화 수는 항상 NN편입니다.

주 목록을 평점 오름차순으로 정렬하려 합니다. 목록을 직접 고치지는 않습니다. 대신 매 단계에서 어떤 영화를 어디에 넣을지 정해서, 주 목록이 정렬될 때까지의 단계 수를 최소로 만듭니다.

입력

첫째 줄에 두 정수 NN과 KK가 주어진다 (1≤N≤100 0001 \le N \le 100\,000, 1≤K≤200 0001 \le K \le 200\,000).

둘째 줄에 주 목록의 NN개 평점이 주어진다.

셋째 줄에 보조 목록의 KK개 평점이 주어진다.

주 목록과 보조 목록의 평점을 합하면 집합 {1,2,…,N+K}\{1, 2, \ldots, N + K\}와 같다.

출력

주 목록을 정렬하는 데 필요한 최소 단계 수를 한 개의 정수로 출력한다. 불가능하면 −1-1을 출력한다.

힌트

첫 단계에서는 남은 영화 중 최고인 평점 5의 영화를 본다. 그다음 보조 목록의 평점 7 영화를 맨 뒤에 넣어 주 목록을 채운다.

Main=[3 1 2 4 7]\mathrm{Main} = [3\ 1\ 2\ 4\ 7] Secondary=[6 8 9 10]\mathrm{Secondary} = [6\ 8\ 9\ 10]

두 번째 단계에서는 최악의 영화인 평점 1을 본다. 평점 8 영화를 맨 뒤에 넣는다.

Main=[3 2 4 7 8]\mathrm{Main} = [3\ 2\ 4\ 7\ 8] Secondary=[6 9 10]\mathrm{Secondary} = [6\ 9\ 10]

세 번째 단계에서는 남은 최고 영화인 평점 8을 보고, 평점 9 영화를 맨 뒤에 넣는다.

Main=[3 2 4 7 9]\mathrm{Main} = [3\ 2\ 4\ 7\ 9] Secondary=[6 10]\mathrm{Secondary} = [6\ 10]

네 번째 단계에서는 남은 최악 영화인 평점 2를 보고, 평점 10 영화를 맨 뒤에 넣는다.

Main=[3 4 7 9 10]\mathrm{Main} = [3\ 4\ 7\ 9\ 10] Secondary=[6]\mathrm{Secondary} = [6]

주 목록이 오름차순으로 정렬되었으므로 답은 4이다. 이 예시에서는 모두 맨 뒤에 넣었지만, 영화는 주 목록의 어느 위치에든 넣을 수 있다.

예제1

  1. 예제 1

    입력
    5 5
    3 1 5 2 4
    6 8 7 9 10
    
    예상 출력
    4