理发

haircut.cpp/in/out/1s/256M

李明对整理自己的头发感到疲惫,于是他决定去理发。他有一排\(N\)缕头发,第\(i\)缕头发初始时长度为\(A_i\)微米\((0≤ A_i ≤N)\)。理想情况下,他想要他的头发在长度上单调递增,所以他定义他的头发的“不良度”为逆序对的数量:满足\(i<j\)及\(A_i>A_j\)的二元对\((i,j)\)。

对于每一个\(j=0,1,…,N−1\),李明想要知道他所有长度大于\(j\)的头发的长度均减少到\(j\)时他的头发的不良度。

【输入描述】

输入的第一行包含\(N\)。
第二行包含\(A_1,A_2,…,A_N\)。

【输出描述】

对于每一个\(j=0,1,…,N−1\),用一行输出李明头发的不良度。

【样例】

haircut.in

5
5 2 3 3 0

haircut.out

0
4
4
5
7

【样例解释】

输出的第四行描述了 李明 的头发长度减少到 3 时的逆序对数量。
\(A=[3,2,3,3,0]\) 有五个逆序对:\(A_1>A_2\), \(A_1>A_5\), \(A_2>A_5\), \(A_3>A_5\) 和 \(A_4>A_5\)。

【数据范围】

对于 100%的数据, 1≤N≤10^5。
共 13 个测试点,其中 1 为样例,其余性质如下:
测试点 2 满足 N≤100。
测试点 3∼5 满足 N≤5000。
测试点 6∼13 没有额外限制。

信息

ID
1068
难度
9
分类
(无)
标签
(无)
递交数
5
已通过
1
通过率
20%
上传者