HP and Splitting of Array

4

8 votes
Advanced Data Structures, Algorithms, Data Structures, Fenwick Tree, Medium, Open
Problem

HP recently started learning about a property called inversion count. An inversion count of an array indicates how far from (or close to) being sorted the array is. If the array is already sorted, the inversion count is 0; if it's sorted in reverse order, the inversion count is maximal.

Formally speaking, two elements Ai and Aj form an inversion if Ai>Aj and i<j. The inversion count is the number of pairs of indices (i,j) such that Ai and Aj form an inversion.

You are given an array A with size N. Let's denote an i-rotation of this array as the array formed by removing the first i elements from the array and adding (appending) them to the end of the array in the same order. For example, the 2-rotation of the array [1,3,2,4,6] is [2,4,6,1,3].

Image

HP wants to know the inversion counts of i-rotations of array A. Compute this inversion count for each i (1iN).

Constraints

  • 1T10
  • 1N100,000
  • 1Ai1,000,000 for each valid i
  • all elements of the array A are unique

Input format

The first line of the input contains a single integer T — the number of test cases. Each test case consists of two lines.

The first line of each test case contains a single integer N denoting the size of the array.

The second line contains N space-separated integers A1,A2,,AN.

Output format

For each test case, print a single line containing N space-separated integers. The i-th of these integers should denote the inversion count of the i-rotation of A, for each 1iN.

Sample Input
1
5
1 3 2 4 6
Sample Output
5 5 7 5 1
Time Limit: 1
Memory Limit: 256
Source Limit:
Explanation

The array A is [1,3,2,4,6]. After moving the first element to the end, we get an array [3,2,4,6,1]. The inversions in this array are (A1,A2), (A1,A5), (A2,A5), (A3,A5) and (A4,A5). Therefore, the inversion count of the 1-rotation of A is 5.

Editor Image

?