zoukankan      html  css  js  c++  java
  • 【模板】归并排序(+求逆序对)

    没有网址qwq

    没有oj

    翻树状数组看到求逆序对先复习一下归并求逆序对qwq

    逆序对真是个神奇的东西啊QAQ

    纯属随手一打随手一贴quq

     1 #include<cstdio>
     2 #include<iostream>
     3 using namespace std;
     4 int n, a[100010], b[100010], cnt = 0;
     5 void merge_sort(int l, int r) {
     6     if(r-l > 0) {//if 打成 while
     7         int mid = (l+r)/2; // int mid = (l+r)>>1  写成 >>2 ????
     8         int i = l, p = l, q = mid+1;
     9         merge_sort(l, mid);
    10         merge_sort(mid+1, r);
    11         while(p <= mid || q <= r) {
    12             if(q > r || ((p<=mid) && a[p] <= a[q])) //p<=mid !!!!!别打成p<mid!!! 
    13                 b[i++] = a[p++];
    14             else b[i++] = a[q++], cnt = cnt + (mid - p  + 1);
    15             //mid - 当前已经比较到哪个元素了 (p)
    16             //别减成i 或者 l  
    17         }
    18         for(int i = l; i <= r; i++)
    19             a[i] = b[i]; //把这个赋值的循环放到if(r - l > 0) 外
    20     }
    21 }
    22 int main() {
    23     scanf("%d", &n);
    24     for(int i = 1; i <= n; i++) {
    25         scanf("%d", &a[i]);
    26     }
    27     merge_sort(1, n);
    28     printf("qwq排序后:
    ");
    29     for(int i = 1; i <= n; i++) 
    30         cout<<a[i]<<' ';
    31     cout<<endl<<"quq逆序对数:"<<cnt<<endl;
    32     return 0;
    33 }

     一个merge_sort 你能错出这么多花样??

    总之岁月漫长,然而值得期待。
  • 相关阅读:
    session的使用
    不可变对象的魅力
    协变和逆变
    LaTeX 学习小结
    KMP 算法的两种实现
    MySQL MVCC
    Java 并发之 Executor 框架
    Java 动态代理的简单使用和理解
    Java 偏向锁、轻量级锁和重量级锁
    事件循环和协程
  • 原文地址:https://www.cnblogs.com/Hwjia/p/9810623.html
Copyright © 2011-2022 走看看