<?php


/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 * 
 * @param data int整型一维数组 
 * @return int整型
 */
function InversePairs( $data )
{
    // write code here
    if (empty($data)) return 0;
    return InversePairsCore($data,0, count($data)-1);
}
function InversePairsCore(&$data, $start, $end) {
    if ($start == $end) return 0;
    $mid = ($start + $end) >> 1;
    $leftCount = InversePairsCore($data, $start, $mid);
    $rightCount = InversePairsCore($data, $mid+1, $end);
    $count = mergeArray($data, $start, $mid, $end);
    return ($leftCount + $rightCount + $count)%1000000007;
}
function mergeArray(&$data, $start, $mid, $end) {
    $count = 0;
    $i = $start;
    $j = $mid + 1;
    $tmp = [];
    while ($i <= $mid && $j <= $end) {
        if ($data[$i] > $data[$j]) {
            $tmp[] = $data[$j++];
            $count += $mid - $i + 1;
        } else {
            $tmp[] = $data[$i++];
        }
//         if ($data[$i] > $data[$j]) {
//             $tmp[] = $data[$i++];
//             $count += $end - $j + 1; 
//         } else {
//             $tmp[] = $data[$j++];
//         }
    }
    while ($i <= $mid) {
        $tmp[] = $data[$i++];
    }
    while($j <= $end) {
        $tmp[] = $data[$j++];
    }
    for ($i = 0; $i < count($tmp);$i++) {
        $data[$start + $i] = $tmp[$i];
    }
    return $count;
}