TLE求助!用的是归并但复杂度还是n^2,
  • 板块P1908 逆序对
  • 楼主_czx_
  • 当前回复2
  • 已保存回复2
  • 发布时间2023/9/26 18:17
  • 上次更新2023/11/2 18:00:45
查看原帖
TLE求助!用的是归并但复杂度还是n^2,
801391
_czx_楼主2023/9/26 18:17
#include<iostream>
using namespace std;
int n;
int s[500050],a[500050];
long long ans;
void merge(int l,int r){
	if(l == r) return;
	int mid = (l+r)>>1;
	merge(l,mid);
	merge(mid+1,r);
	int i = l,j = mid+1,k = l;
	while(i<=mid&&j<=r){
		if(a[i]<=a[j]){
			s[k++] = a[i++];
		}else{
			ans+=mid-i+1;
			s[k++] = a[j++];
		}
	}
	while(i<=mid) s[k++] = a[i++];
	while(j<=r) s[k++] = a[j++];
	for(int i = 1;i<=r;i++){
		a[i] = s[i];
	}
}
int main(){
	ios::sync_with_stdio(false);cin.tie(0);
	cin >> n;
	for(int i = 1;i<=n;i++){
		cin >> a[i];
	}
	merge(1,n);
	cout << ans;
	return 0;
} 
2023/9/26 18:17
加载中...