蒟蒻问一下各位dalao样例能过为啥只有30(已开longlong)
查看原帖
蒟蒻问一下各位dalao样例能过为啥只有30(已开longlong)
393190
aldol_reaction楼主2020/11/3 21:56
#include<cstdio>
#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
#include<cmath>
#include<vector>
#include<queue>
#include<map>
#include<stack>
#include<set>
using namespace std;
typedef long long ll;

#define maxn 500005
int a[maxn], t[maxn], n;
ll ans;

void mergeSort(int l, int r) {
	if(l == r) return;
	int mid = (l+r) / 2;
	mergeSort(l, mid);
	mergeSort(mid+1, r);
	int p = l, q = mid+1, i = l;
	while(p <= mid && q <= r) {
		if(a[p] < a[q]) t[i++] = a[p++];
		else {
			ans += mid-p+1;
			t[i++] = a[q++];
		}
	}
	while(p <= mid) t[i++] = a[p++];
	while(q <= r)   t[i++] = a[q++];
	for(int i = l; i <= r; i++) a[i] = t[i];
}

void inp(void) {
	scanf("%d", &n);
	for(int i = 1; i <= n; i++) scanf("%d", &a[i]);
}

int main() {
	inp();
	mergeSort(1, n);
	cout << ans;
	return 0;
}

















2020/11/3 21:56
加载中...