样例过了,代码正确性应该是对的但是就是超时
#include <bits/stdc++.h>
using namespace std;
const int N = 5e5+5;
typedef long long ll;
int n,a[N],t[N];
long long s;
void mergesort(int l,int r)
{
if (l == r) return ;
int mid = (l + r) / 2;
mergesort(1,mid);
mergesort(mid+1,r);
int i = l,j = mid+1,p = l;
while (i <= mid && j <= r)
{
if (a[i] > a[j])
{
s += mid - i + 1;
t[p] = a[j];
p++;
j++;
}
else
{
t[p] = a[i];
p++;
i++;
}
}
while (i <= mid)
{
t[p] = a[i];
p++;
i++;
}
while (j <= r)
{
t[p] = a[j];
p++;
j++;
}
for (int i = l;i <= r;i++)
{
a[i] = t[i];
}
}
inline int read()
{
int x=0,f=1;char ch=getchar();
while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}
return x*f;
}
inline void write(int x)
{
if(x<0)
putchar('-'),x=-x;
if(x>9)
write(x/10);
putchar(x%10+'0');
return;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
n = read();
for (int i = 1;i <= n;i++)
{
a[i] = read();
}
mergesort(1,n);
write(s);
return 0;
}