码迷,mamicode.com
首页 > 其他好文 > 详细

9.15上课日记

时间:2018-09-15 19:18:01      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:scan   using   std   复习   ace   mes   names   code   排序   

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上课日记

标签:scan   using   std   复习   ace   mes   names   code   排序   

原文地址:https://www.cnblogs.com/lisuier/p/9651788.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!