벽돌깨기

NYPC 2017 · 예선 스테이지 2

넥슨에서 새로 개발하고 있는 벽돌깨기 게임은 다음과 같은 규칙으로 이루어져 있다.

아래 그림의 예를 고려해보자. N=5N=5줄로 벽돌들이 쌓여 있고, 입력받은 순열은 (1,3,2,5,4)(1, 3, 2, 5, 4)라고 하자.

11번 줄에 있는 벽돌 22개를 깨고, 22번 줄에 있는 벽돌 22개를 깬 결과는 다음과 같다. 이 결과가 조건을 만족하며, 많은 방법 중에서 가장 벽돌을 깨는 횟수가 적은 답이 된다.

반면, 같은 입력에 대해서 순열이 (1,2,4,5,3)(1, 2, 4, 5, 3)으로 주어진다면 이 경우에 대해서는 답이 존재하지 않는데, 벽돌을 없애는 것만으로는 33번째 줄이 전체에서 44번째로 돌이 많게 할 수는 없기 때문이다.

벽돌의 줄 수, 각 줄에 쌓인 벽돌의 수, 입력 순열이 주어졌을 때 주어진 순열과 각 열에 쌓인 벽돌의 수의 순서가 일치하게 하도록 벽돌을 깨는 횟수의 최소값을 구하는 프로그램을 작성하시오.

입력 형식

첫째 줄에 벽돌의 줄 수를 나타내는 자연수 NN (11 이상 200000200\,000 이하)이 주어진다.

다음 줄에는 NN개의 자연수가 주어지는데, 각각 왼쪽부터 오른쪽으로 차례로 각 줄을 보았을 때 이 줄에 쌓여있는 벽돌 수를 나타낸다. 한 줄에 올 수 있는 벽돌의 수는 00 이상 10000000001\,000\,000\,000 이하이다.

그 다음 줄에는 11부터 NN 사이의 숫자가 정확하게 한번씩 포함된 NN개의 숫자로 이루어진 순열이 주어진다.

출력 형식

한 줄로 결과를 출력한다. 여기에는 주어진 조건을 만족하게 하도록 벽돌을 깨는 횟수의 최소값을 출력한다. 만약 벽돌을 깨는 것으로 조건을 만족할 수 없다면, -1을 출력한다. 아무 벽돌을 깨지 않더라도 조건을 만족한다면 00을 출력한다.

예제 1

입력

5 3 5 2 6 4 1 3 2 5 4

출력

4

예제 2

입력

5 3 5 2 6 4 1 2 4 5 3

출력

-1

채점 방식

입력 케이스들은 다음과 같은 종류로 구별되며, 한 종류의 케이스를 다 맞추어야 그 종류에 배정된 점수를 받을 수 있다.

종류 1: 60

N1000N \le 1\,000이고 한 줄에 쌓일 수 있는 벽돌의 수는 최대 1000010\,000.

종류 2: 140

문제의 원래 제한조건 이외의 추가된 제한이 없음.

해설