아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

루틴과의 싸움

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

요약
d를 1부터 n까지 늘려 가며 길이 d인 모든 연속 구간에서 서로 다른 작업 유형의 개수를 구해 모두 더한 값을 출력한다.
난이도

보통10점 중 7점

유형
배열, 누적 합, 조합론, 수학
정답자
아직 제출이 없습니다

문제

직원의 업무 효율을 높이는 데 중요한 요소는 루틴과의 싸움이다. 회사에서 직원이 수행하는 작업 유형의 다양성을 수학적으로 모델링해 보자.

직원이 연속된 nn일 동안 일한다고 하자. 매일 직원은 정확히 한 가지 유형의 작업을 수행하며, ii번째 날에 수행하는 작업 유형을 정수 aia_i로 나타내자.

직원 업무의 루틴 정도를 평가하기 위해 다음과 같은 지표를 사용하자. 정수 dd를 고정하고, 연속한 dd일로 이루어진 모든 구간을 생각하자. 각 구간마다 직원이 그동안 수행한 서로 다른 작업 유형의 개수를 구해 모두 더하자. 이 값을 SdS_d라 하고 dd-다양성이라고 부르자. dd-다양성이 클수록 직원이 더 다양한 유형의 작업을 수행한 것이다. 직원의 변동성 프로필을 값의 배열 [S1,S2,…,Sn][S_1, S_2, \ldots, S_n]이라고 하자.

직원이 수행하는 작업 유형의 수열 a1,a2,…,ana_1, a_2, \ldots, a_n이 주어질 때, 그 직원의 변동성 프로필을 계산하는 프로그램을 작성하라.

입력

첫째 줄에 분석할 연속된 근무일 수 nn이 주어진다 (1≤n≤2⋅1051 \le n \le 2 \cdot 10^5).

둘째 줄에 직원이 수행한 작업 유형 nn개 a1,a2,…,ana_1, a_2, \ldots, a_n이 주어진다 (1≤ai≤1091 \le a_i \le 10^9).

출력

nn개의 정수 S1,S2,…,SnS_1, S_2, \ldots, S_n을 출력한다.

힌트

첫 번째 예제에서 SdS_d가 어떻게 계산되는지 살펴보자.

1-다양성: 하루로 이루어진 모든 구간에서 직원이 수행한 서로 다른 작업 유형의 개수를 모두 더한다.

일 구간작업 유형서로 다른 개수
1 - 111
2 - 231
3 - 321
4 - 411
5 - 521

1-다양성의 값은 S1=1+1+1+1+1=5S_1 = 1 + 1 + 1 + 1 + 1 = 5이다.

2-다양성: 이틀로 이루어진 모든 구간에서 직원이 수행한 서로 다른 작업 유형의 개수를 모두 더한다.

일 구간작업 유형서로 다른 개수
1 - 21, 32
2 - 33, 22
3 - 42, 12
4 - 51, 22

2-다양성의 값은 S2=2+2+2+2=8S_2 = 2 + 2 + 2 + 2 = 8이다.

3-다양성: 사흘로 이루어진 모든 구간에서 직원이 수행한 서로 다른 작업 유형의 개수를 모두 더한다.

일 구간작업 유형서로 다른 개수
1 - 31, 3, 23
2 - 43, 2, 13
3 - 52, 1, 22

3-다양성의 값은 S3=3+3+2=8S_3 = 3 + 3 + 2 = 8이다.

4-다양성: 나흘로 이루어진 모든 구간에서 직원이 수행한 서로 다른 작업 유형의 개수를 모두 더한다.

일 구간작업 유형서로 다른 개수
1 - 41, 3, 2, 13
2 - 53, 2, 1, 23

4-다양성의 값은 S4=3+3=6S_4 = 3 + 3 = 6이다.

5-다양성: 닷새로 이루어진 모든 구간에서 직원이 수행한 서로 다른 작업 유형의 개수를 모두 더한다.

일 구간작업 유형서로 다른 개수
1 - 51, 3, 2, 1, 23

5-다양성의 값은 S5=3S_5 = 3이다.

예제2

  1. 예제 1

    입력
    5
    1 3 2 1 2
    
    예상 출력
    5 8 8 6 3
    
  2. 예제 2

    입력
    3
    10 10 10
    
    예상 출력
    3 2 1