10分求条
查看原帖
10分求条
1037200
lty2023楼主2024/9/25 21:06

归并排序改的,交上去10分,剩下的点TLE

#include<bits/stdc++.h>
using namespace std;
void print(__int128 num) {
	if (num > 9) {
		print(num / 10);
	}
	putchar(num%10+'0');
}
__int128 sum=0;
long long a[1000000],n,ans;
long long gb_b(long long l1,long long r1,long long l2,long long r2){
	long long i=0;
	long long j=0;
	long long sum=0;
	long long a_size=r1-l1+1;
	long long b_size=r2-l2+1;
	while(i<a_size&&j<b_size){
		if(a[l1+i]<=a[l2+j]){
		}
		else{
			sum=sum+(a_size-i)*(l1+i-1);
		}
	}
	return a_size+b_size;
}
void gb(long long l,long long r){
	if(r-l==1){
		gb_b(l,l,r,r);
		return;
	}
	if(l==r){
		return;
	}
	long long mid=(l+r)/2;
	sort(a+l,a+mid);
	gb(l,mid);
	sort(a+mid+1,a+r);
	gb(mid+1,r);
	gb_b(l,mid,mid+1,r);
}
int main(){
	cin>>n;
	for(long long i=0;i<n;i++){
		cin>>a[i];
	}
	gb(0,n-1);
	print(sum);
}
2024/9/25 21:06
加载中...