蒟蒻求助..写了归并还是TLE
  • 板块P1908 逆序对
  • 楼主Cheney_Z
  • 当前回复7
  • 已保存回复7
  • 发布时间2021/2/1 11:21
  • 上次更新2023/11/5 04:02:03
查看原帖
蒟蒻求助..写了归并还是TLE
449550
Cheney_Z楼主2021/2/1 11:21
#include<bits/stdc++.h>
#define int long long
#define Please return
#define AC 0
using namespace std;
const int size = 5e5+10;

inline int read(){
	int x = 0 , f = 1; char ch = getchar();
	while(!isdigit(ch)){
		if(ch == '-') f = -1;
		ch = getchar();
	}
	while(isdigit(ch)){
		x = (x<<1) + (x<<3) + ch - 48;
		ch = getchar();
	}
	return x * f;
}

int n,cnt;
int a[size],b[size];

void work(int l,int mid,int r){
	memset(b,0,sizeof(b));
	int i = l , j = mid+1;
	
	for(int k=l;k<=r;++k){
		if(i>mid) b[k] = a[j++], cnt += mid-i+1;
		else if(j>r) b[k] = a[i++]; 
		else if(a[i] <= a[j]) b[k] = a[i++];
		else b[k] = a[j++],cnt += mid - i + 1;
	}
	
	for(int k=l;k<=r;++k) a[k] = b[k];
	return;
}

void mysort(int l,int r){
	if(l == r) return;
	
	int mid = (l+r) >> 1;

	mysort(l,mid);
	mysort(mid+1,r);
	
	work(l,mid,r);
	return;
}

signed main(){
	n = read();	
	cnt = 0;

	for(int i=1;i<=n;++i) a[i] = read();
	mysort(1,n);

	printf("%lld\n",cnt);
	
	Please AC;
}
2021/2/1 11:21
加载中...