50求助
查看原帖
50求助
980732
Main_Void_楼主2023/7/27 17:48
#include <iostream>
using namespace std ;
const int N = 1e8;
typedef unsigned long long ULL ;
int q[N], tem[N], n ;

ULL merge_sort( int l, int r) {
	if ( l >= r)
		return 0 ;
	int mid = l + r >> 1 ;
	ULL res = merge_sort(l, mid) + merge_sort( mid + 1, r) ;
	int k = 0, i = l, j = mid + 1 ;
	while ( i <= mid && j <= r ) {
		if ( q[i] <= q[j])
			tem[k++] = q[i++] ;
		else {
			tem[k++] = q[j++] ;
			res += mid - i + 1 ;
		}
	}
	while ( i <= mid)
		tem[k++] = q[i++] ;
	while ( j <= r)
		tem[k++] = q[j++] ;
	for ( int i = l, j = 0 ; i <= r ; i++, j++) {
		q[i] = tem[j] ;
	}
	return res ;
}

int main() {
	scanf("%d",&n);
	for ( int i = 0 ; i < n ; i ++)
		scanf("%d" , &q[i]) ;
    printf("%d",merge_sort(0 , n - 1)) ;
}
2023/7/27 17:48
加载中...