Problem:
MathJax.Hub.Config({ tex2jax: { inlineMath: [["$","$"], ["\\(","\\)"]], processEscapes: true }});

The Number of Inversions

For a given sequence $A = \{a_0, a_1, ... a_{n-1}\}$, the number of pairs $(i, j)$ where $a_i > a_j$ and $i < j$, is called the number of inversions. The number of inversions is equal to the number of swaps of Bubble Sort defined in the following program:

bubbleSort(A)
cnt = 0 // the number of inversions
for i = 0 to A.length-1
for j = A.length-1 downto i+1
if A[j] < A[j-1]
swap(A[j], A[j-1])
cnt++

return cnt

For the given sequence $A$, print the number of inversions of $A$. Note that you should not use the above program, which brings Time Limit Exceeded.

Input

In the first line, an integer $n$, the number of elements in $A$, is given. In the second line, the elements $a_i$ ($i = 0, 1, .. n-1$) are given separated by space characters.

output

Print the number of inversions in a line.

Constraints

$ 1 \leq n \leq 200,000$

$ 0 \leq a_i \leq 10^9$

$a_i$ are all different

Sample Input 1

5
3 5 2 1 4

Sample Output 1

6

Sample Input 2

3
3 1 2

Sample Output 2

2

Solution in JAVA (judge verdict: Wrong Answer)

import java.util.*;
import java.io.*;
import static java.util.Arrays.*;
import static java.util.Collections.*;
import static java.lang.Math.*;
 
public class Main {

  public static class P {
    double x;
    double y;

    P(double _x, double _y) {
      x = _x;
      y = _y;
    }
  }

  public static void koch(int d, P pl, P pr) {
    //pl__s//u\\t__pr 

    if (d==0) return;

    P ps = new P((pl.x * 2 + pr.x)/3, (pl.y * 2 + pr.y)/3);
    P pt = new P((pl.x + pr.x * 2)/3, (pl.y + pr.y * 2)/3);
    P pu = new P(ps.x + (pt.x-ps.x)*0.5 - (pt.y-ps.y)*sqrt(3.0)*0.5, 
         ps.y + (pt.x-ps.x)*sqrt(3.0)*0.5 + (pt.y-ps.y)*0.5);

    koch(d-1, pl, ps); System.out.println(String.valueOf(ps.x) + ' ' + String.valueOf(ps.y));
    koch(d-1, ps, pu); System.out.println(String.valueOf(pu.x) + ' ' + String.valueOf(pu.y));
    koch(d-1, pu, pt); System.out.println(String.valueOf(pt.x) + ' ' + String.valueOf(pt.y));
    koch(d-1, pt, pr);
  }

  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int n = Integer.parseInt(sc.next());
    P pl = new P(0.0, 0.0);
    P pr = new P(100.0, 0.0);
    System.out.println(String.valueOf(pl.x) + ' ' + String.valueOf(pl.y));
    koch(n, pl, pr);
    System.out.println(String.valueOf(pr.x) + ' ' + String.valueOf(pr.y));
  }
}