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;
}