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上课日记的主要内容,如果未能解决你的问题,请参考以下文章

日记1.18

9.15模拟试题

例9.15潜水员

9.15

万圣节日记300字

C语言学习日记5