만드는 중입니다

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

같은 수 만들기

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

요약
0부터 n까지 각 k에 대해 리스트 원소 k개에 양의 정수를 곱한 뒤 만들 수 있는 서로 다른 값의 최소 개수를 구한다.
난이도

보통10점 중 7점

유형
정수론, 그리디, 정렬, 수학
정답자
아직 제출이 없습니다

문제

정수 nn개로 이루어진 목록 a1,a2,…,ana_1, a_2, \ldots, a_n이 주어진다. 한 번의 연산에서 목록의 원소 하나를 골라 임의의 양의 정수를 곱할 수 있다. 곱하는 수로 11을 골라도 된다.

0≤k≤n0 \le k \le n인 모든 kk에 대해, 연산을 kk번 수행한 뒤 목록에 남을 수 있는 서로 다른 정수 개수의 최솟값을 구한다.

입력

첫째 줄에 정수 nn (1≤n≤3×1051 \le n \le 3 \times 10^5)이 주어진다.

둘째 줄에 정수 aia_i (1≤ai≤1061 \le a_i \le 10^6) nn개가 공백으로 구분되어 주어진다.

출력

한 줄에 정수 n+1n+1개를 공백으로 구분해 출력한다. ii번째 정수는 연산을 i−1i-1번 수행한 뒤 목록에 남을 수 있는 서로 다른 정수 개수의 최솟값이다.

예제3

  1. 예제 1

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

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

    입력
    5
    7 7 7 7 7
    
    예상 출력
    1 1 1 1 1 1