Haircut

각 j(0 이상 N-1 이하)에 대해 모든 값을 min(A_i, j)로 자른 배열의 역전 쌍 개수를 구한다.

어려움8정렬누적 합구현수학아직 제출이 없습니다시간 제한1초메모리 제한512 MB

문제

Tired of his stubborn cowlick, Farmer John decides to get a haircut. He has NN (1N1051\le N\le 10^5) strands of hair arranged in a line, and strand ii is initially A_iA\_i micrometers long (0A_iN0\le A\_i\le N). Ideally, he wants his hair to be monotonically increasing in length, so he defines the "badness" of his hair as the number of inversions: pairs (i,j)(i,j) such that i<ji < j and A_i>A_jA\_i > A\_j.

For each of j=0,1,,N1j=0,1,\ldots,N-1, FJ would like to know the badness of his hair if all strands with length greater than jj are decreased to length exactly jj.

(Fun fact: the average human head does indeed have about 10510^5 hairs!)

입력

The first line contains NN.

The second line contains A_1,A_2,,A_N.A\_1,A\_2,\ldots,A\_N.

출력

For each of j=0,1,,N1j=0,1,\ldots,N-1, output the badness of FJ's hair on a new line.

Note that the large size of integers involved in this problem may require the use of 64-bit integer data types (e.g., a "long long" in C/C++).

힌트

The fourth line of output describes the number of inversions when FJ's hairs are decreased to length 3. Then A=\[3,2,3,3,0]A=\[3,2,3,3,0] has five inversions: A_1>A_2,,A_1>A_5,,A_2>A_5,,A_3>A_5,A\_1>A\_2,\\,A\_1>A\_5,\\,A\_2>A\_5,\\,A\_3>A\_5, and A_4>A_5A\_4>A\_5.