DOs__lx @ 2020-02-23 13:05:49
只有50分 QWQ
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#define re register
const int M=5e5+5;
int a[M],r[M],n;
long long ans;
namespace fir{
inline int read(){
int s=0,w=1;
char c=getchar();
while(c>'9'||c<'0'){
if(c=='-') w=-1;
c=getchar();
}
while(c>='0'&&c<='9'){
s=(s<<3)+(s<<1)+(c^48);
c=getchar();
}
return s*w;
}
inline void write(int a){
int tot=abs(a);
if(a<0) putchar('-');
int cnt=0;
char c[M];
while(tot>0){
c[cnt++]=tot%10+'0';
tot/=10;
}
while(cnt>0) putchar(c[--cnt]);
}
}
namespace solve{
inline void msort(int s,int t){
if(s==t) return;
int mid=s+t>>1;
msort(s,mid);
msort(mid+1,t);
int i=s;
int j=mid+1;
int k=s;
while(i<=mid&&j<=t){
if(a[i]<=a[j]){
r[k]=a[i];
k++;
i++;
}
else{
r[k]=a[j];
k++;
j++;
ans+=(long long)mid-i+1;
}
}
while(i<=mid){
r[k]=a[i];
k++;
i++;
}
while(j<=t){
r[k]=a[j];
k++;
j++;
}
for(int i=s;i<=t;++i) a[i]=r[i];
}
}
int main(){
n=fir::read();
for(int i=1;i<=n;++i) a[i]=fir::read();
solve::msort(1,n);
fir::write(ans);
return 0;
}
by DOs__lx @ 2020-02-23 13:16:02
不行 还是错了一半 QWQ
by 神山识 @ 2020-02-23 13:17:32
那具体也就不清楚了/wq但是您最先输出的是-
by DOs__lx @ 2020-02-23 13:18:11
是不是快输的问题
by WYXkk @ 2020-02-23 13:18:36
@DOs__lx 您的 read 和 write 都是读int输int。。。
by 神山识 @ 2020-02-23 13:19:02
@WYXkk ta不是#define int long long了吗
by WYXkk @ 2020-02-23 13:19:35
@我不是箭毒蛙 他可能是在 namespace fri 后面define 的
by DOs__lx @ 2020-02-23 13:20:15
果然 我把快输删了就A了 QWQ
by WYXkk @ 2020-02-23 13:20:56
您在快输之前 define 一个试试
by DOs__lx @ 2020-02-23 13:23:28
可以的 我直接把fir空间里的int全部变成long long就过了
by DOs__lx @ 2020-02-23 13:24:08
谢谢各位的帮助鸭