技巧:
    归并排序
思路
    归并排序统计数量
实现
    
package main

import (
    .    "fmt"
    "os"
    "io"
    "bufio"
)
var cnt int
var tmp []int
func mergeSort(arr []int, l, r int) {
    if l < r {
        m := l + (r -l)/2
        mergeSort(arr,l,m)
        mergeSort(arr,m+1,r)

        ll,rr :=l,m+1
        for i := l; i <= r;i++{
            if ll <= m && (rr > r|| arr[ll] <= arr[rr]){
                tmp[i] = arr[ll]
                ll++
            }else {
                tmp[i] = arr[rr]
                cnt += m - ll + 1
                rr++
            }
        }
        for i := l; i<=r;i++{
            arr[i] = tmp[i]
        }
    }
}

// https://ac.nowcoder.com/acm/problem/15163
func NC15163(_r io.Reader, _w io.Writer) {
    in, out := bufio.NewReader(_r), bufio.NewWriter(_w)
    defer out.Flush()
    
    var n int
    Fscan(in, &n)
    arr := make([]int, n)
    tmp = make([]int, n)
    for i := 0; i < n; i++ {
        Fscan(in, &arr[i])
    }
    mergeSort(arr, 0, n-1)
    Fprintln(out, cnt)
    
}

func main() {
    NC15163(os.Stdin, os.Stdout)
}