만드는 중입니다

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

블록

면접 대비

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

요약
서로 다른 n개의 수가 주어질 때, 앞쪽 k개의 수가 나머지 수보다 모두 작은 분할 위치 k를 찾아 목록으로 출력합니다.
난이도

쉬움10점 중 3점

유형
배열, 구현
정답자
아직 제출이 없습니다

문제

Vova가 어렸을 때 부모님이 그에게 블록 nn개로 된 세트를 선물했다. 블록마다 자연수가 하나씩 적혀 있으며, 같은 수가 적힌 블록은 없다.

최근 Vova가 블록을 전부 꺼내 한 줄로 늘어놓았다. 여러 정렬 알고리즘을 알고 있던 그는 적힌 수가 왼쪽에서 오른쪽으로 갈수록 커지도록 배열했다.

Vova가 학교에 간 사이 동생 Petya와 여동생 Olya가 그의 방에 들어왔다. Petya는 줄 왼쪽에 있는 블록 몇 개를 가져갔다. Olya는 나머지 블록, 즉 Petya의 블록보다 오른쪽에 있던 블록을 모두 가져갔다. 두 사람 모두 블록을 최소 하나는 가져갔다.

Vova가 돌아오기 전에 Petya와 Olya는 블록을 원래대로 되돌려 놓았다. 블록은 모두 한 줄에 있었고 Petya의 블록이 Olya의 블록보다 왼쪽에 있었다는 점은 기억하고 있었다. 하지만 각자 가지고 논 블록의 순서에는 신경 쓰지 않았으므로, 되돌려 놓은 블록에 적힌 수는 증가하지 않을 수도 있다.

Vova는 집에 돌아와 이상한 낌새를 느꼈다. Olya를 추궁해 블록이 어떻게 뒤섞였는지 알아냈다. 그러던 중 Vova는 Petya가 몇 개의 블록으로 놀았는지 (Olya는 나머지 블록으로 놀았다고 할 때) 알아낼 수 있을지 궁금해졌다. 이 문제를 풀어 달라.

입력

첫째 줄에 블록의 개수 nn (1≤n≤3000001 \le n \le 300000)이 주어진다.

둘째 줄에는 nn개의 정수 aia_i (1≤ai≤1091 \le a_i \le 10^9)가 주어진다. 이는 Vova가 집에 돌아왔을 때 왼쪽에서 오른쪽으로 놓여 있던 블록에 적힌 수이다. 모든 aia_i는 서로 다르다.

출력

첫째 줄에 Petya가 가지고 놀았을 수 있는 블록 묶음의 개수 kk를 출력한다. 둘째 줄에는 각 묶음에 들어 있는 블록의 개수를 오름차순으로 출력한다.

예제2

  1. 예제 1

    입력
    3
    1 2 3
    
    예상 출력
    2
    1 2
    
  2. 예제 2

    입력
    5
    2 1 5 9 6
    
    예상 출력
    2
    2 3