4 条题解
-
2
??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
-
-2
#include<bits/stdc++.h>
using namespace std;
const int N=1e6;
typedef long long ll;
int a[N],b[N],n;
ll total=0;
inline int read()
{
char c=getchar();int num=0; for(;!isdigit(c);c=getchar()); for(;isdigit(c);c=getchar()) num=num*10+c-'0'; return num;
}
void mergesort(int l,int r){
if(l==r) return; int mid=(l+r)/2; mergesort(l,mid); mergesort(mid+1,r); int x=l,y=mid+1,z=l; while(x<=mid&&y<=r){ if(a[x]>a[y]){ b[z++]=a[y++]; total=total+mid-x+1; } else b[z++]=a[x++]; } while(x<=mid) b[z++]=a[x++]; while(y<=r) b[z++]=a[y++]; for(int i=l;i<=r;i++) a[i]=b[i];
}
int main() {
cin>>n; for(int i=1;i<=n;i++) a[i]=read(); mergesort(1,n); cout<<total<<endl; return 0;
}
-
-3
#include<bits/stdc++.h> using namespace std; const int N=1e6; typedef long long ll; int a[N],b[N],n; ll total=0; inline int read() { char c=getchar();int num=0; for(;!isdigit(c);c=getchar()); for(;isdigit(c);c=getchar()) num=num*10+c-'0'; return num; } void mergesort(int l,int r){ if(l==r) return; int mid=(l+r)/2; mergesort(l,mid); mergesort(mid+1,r); int x=l,y=mid+1,z=l; while(x<=mid&&y<=r){ if(a[x]>a[y]){ b[z++]=a[y++]; total=total+mid-x+1; } else b[z++]=a[x++]; } while(x<=mid) b[z++]=a[x++]; while(y<=r) b[z++]=a[y++]; for(int i=l;i<=r;i++) a[i]=b[i]; } int main() { cin>>n; for(int i=1;i<=n;i++) a[i]=read(); mergesort(1,n); cout<<total<<endl; return 0; }
包对的
- 1
信息
- ID
- 1029
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 8
- 标签
- (无)
- 递交数
- 17
- 已通过
- 6
- 上传者