zoukankan      html  css  js  c++  java
  • 二叉树求逆序对(伪AC 23333)

    成链的时候 是最坏情况 O(n^2)的复杂度呢!

    按照输入的数据 一个一个的插入建树 然后维护左右儿子的个数

     (我们规定, 左儿子 小于  父亲  右儿子大于父亲)

    往左走 说明存在逆序对 逆序对的个数就是父亲+父亲右儿子的节点数

    long long qans;
    
    struct nobe {
        nobe *lson;
        nobe *rson; 
        int lsz;
        int rsz;
        int val;
        nobe () {
            lson = rson = NULL;
            lsz = rsz = val = 0;
        }
    }*head;
    
    inline void pshup(nobe *rt)
    {
        rt->lsz = rt->rsz = 0;
        if (rt->lson) rt->lsz = 1 + rt->lson->rsz + rt->lson->lsz;
        if (rt->rson) rt->rsz = 1 + rt->rson->rsz + rt->rson->lsz;
    }
    
    void add(nobe *rt, int val)
    {
        if (val < rt->val) {
            qans += rt->rsz + (long long)1; 
            if (rt->lson) {
                add(rt->lson, val);
            } else {
                rt->lson = new nobe;
                rt->lsz++;
                rt->lson->val = val;
            }
        } else {
            if (rt->rson) {
                add(rt->rson, val);
            } else {
                rt->rson = new nobe;
                rt->rsz++;
                rt->rson->val = val;
            }
        }
        pshup(rt);
    }
  • 相关阅读:
    WPF元素之间的关系
    依赖属性
    多线程显示运行状态
    WPF 基本知识
    SQL 这个删除重复行怎么做
    路由事件
    WPF的数据邦定
    SQL对表中XML列的查询
    WMI访问注册表读取系统信息
    创建第一个WPF应用程序
  • 原文地址:https://www.cnblogs.com/cgjh/p/9349524.html
Copyright © 2011-2022 走看看