zoukankan      html  css  js  c++  java
  • 归并算法实现求解逆序对【模板】

    已用此模板过掉了好几题。

    #include<stdio.h>
    #define LL long long //以后可以考虑这样写 简洁
    
    int n,i,a[500010], b[500010];
    //需要开辟两个数组
    
    LL count(int l,int r)//统计[l ,r]的逆序对数
    {
        LL s=0;//初始化
        int mid=(l+r)/2, i=l, j=mid+1, k=l;
        //printf("%d 
    ", mid );
    
        if (l<mid) s+=count(l,mid);//计算累加左区间的逆序对
        if (mid+1<r) s+=count(mid+1,r);//计算累加右区间的逆序对
    
        while( i<=mid || j<=r )
        {
            while ( i<=mid && (j>r || a[i]<=a[j]) ){
                //printf("%d < %d", a[i], a[j] ); //左边理应小于右边(左边等级低 右边等级高)
                b[k++]=a[i++];
            }
            while ( j<=r && (i>mid || a[j]<a[i]) )
            {                        //右边的大于左边的进行计数
               // printf(" %d-<-%d ", a[j], a[i] );
                b[k++]=a[j++];
                s+=mid-i+1;
            }
        }
        for(i=l;i<=r;i++)
            a[i]=b[i];
        return s;
    }
    
    int main()
    {
        while(scanf("%d",&n)!=EOF)
        {
            for (i=0; i<n; i++)
                scanf("%d", &a[i]);
            printf("%lld
    ", count(0,n-1));
        }
        return 0;
    }
  • 相关阅读:
    学生管理系统
    Selenium元素定位的30种方式
    python-- 多进程
    python 多线程的实现
    python 节省内存的for循环技巧
    python 生成器
    python 字符串编码检测
    opencv-python 图片的几何变换
    opencv-python --图像处理
    目标检测
  • 原文地址:https://www.cnblogs.com/yspworld/p/4704171.html
Copyright © 2011-2022 走看看