9.15上课日记
Posted lisuier
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了9.15上课日记相关的知识,希望对你有一定的参考价值。
part1
逆序对
详见代码
顺带归并排序一起复习
#include<bits/stdc++.h>
using namespace std;
int a[100001],b[100001];
long long ans=0;
void zuhe(int l,int m,int r){
int i=l,k=l,j=m+1;//i左区间,j右区间
while(i<=m&&j<=r){
if(a[i]>a[j]){//左大于右(逆序了)下来一个右区间
b[k]=a[j];k++,j++;
ans+=m-i+1;
}
else b[k++]=a[i++];//下来一个左区间(没有逆序)
}
while(i<=m)b[k++]=a[i++];//对于剩余部分直接加入
while(j<=r)b[k++]=a[j++];
for(int i=l;i<=r;i++){//重排
a[i]=b[i];
}
}
void guibing(int l,int r){
if(l<r){
int m=l+r>>1;
guibing(l,m);
guibing(m+1,r);
zuhe(l,m,r);
}
}
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
guibing(1,n);
cout<<ans;
return 0;
}
以上是关于9.15上课日记的主要内容,如果未能解决你的问题,请参考以下文章