先RE,修改后TLE归并排序求助qwq
查看原帖
先RE,修改后TLE归并排序求助qwq
703622
xzx_wly楼主2022/4/24 18:10

rt,本来是RE的,然后我修改了一下 (具体干嘛我忘了,因为中途我上了2个小时的网课),变成了TLE。找同学要了快读代码,还是TLE。打开了题解,感觉和题解的思路没啥区别,所以来求助了qwq

#include <bits/stdc++.h>
using namespace std;
int n,xzx[400005],gyy[400005];
long long ans=0;
//inline int IntRead(){
//    char ch=getchar();
//    int s=0,w=1;
//    while(ch<'0'||ch>'9'){
//        if(ch=='-'){
 //       	w=-1;
//		} 
//        ch=getchar();
 //   }
//    while(ch>='0'&&ch<='9'){
//        s=s*10+ch-'0',
//        ch=getchar();
//    }
//    return s*w;
//}
void MergeSort (int left,int right){
	if (left>=right){
		return ;
	}
	int mid=(left+right)/2,k=0,i=left,j=mid+1;
	MergeSort (left,mid);
	MergeSort (mid+1,right);
	//int *qwq=new int [right-left+1];
	while ((i<=mid)&&(j<=right)){
		if (xzx[i]<=xzx[j]){
			gyy[k++]=xzx[i++];
		}
		else{
			gyy[k++]=xzx[j++];
			ans=ans+mid-i+1;
		}
	}
	while (i<=mid){
		gyy[k++]=xzx[i++];
	}
	while (j<=right){
		gyy[k++]=xzx[j++];
	}
	for (i=0;k=left;k<=right){
		xzx[k++]=gyy[i++];
	}
}

int main (){
	freopen ("reverse.in","r",stdin);
	freopen ("reverse.out","w",stdout);
	n=IntRead();
	for (int i=1;i<=n;i++){
		xzx[i]=IntRead();	
	}
	MergeSort (1,n);
	printf ("%lld",ans);
	return 0;
} 
2022/4/24 18:10
加载中...