zoukankan      html  css  js  c++  java
  • LeetCode "Count of Smaller Number After Self"

    Almost identical to LintCode "Count of Smaller Number before Self". Corner case needs to be taken care of.

    class Solution {
        //////////////////
        // Fenwick Tree //
        vector<long long> ft;
        void update(int i, long long x)
        {
            if (i == 0)
            {
                ft[0] ++;
                return;
            }
            if ((i + 1) > ft.size()) return;
            for (; i < ft.size(); i += (i & -i))
                ft[i] += x;
        }
    
        long long query(int i)
        {
            if (i == 0) return ft[0];
    
            i = min(i, int(ft.size() - 1));
            long long s = 0;
            for (; i > 0; i -= (i & -i))
                s += ft[i];
            return s + ft[0];
        }
        //////////////////
    public:
        vector<int> countSmaller(vector<int>& nums) {
            ft.assign(20000, 0);
            vector<int> ret;
            if(nums.size() < 1) return {};
            //    handling neg
            auto r = minmax_element(nums.begin(), nums.end());
            int minv = *r.first;
            int maxv = *r.second;
            int d = 0;
            vector<long long> ns;
            if (minv < 0)
            {
                d = -minv + 1;
            }
            for (auto v : nums)
                ns.push_back(v + d);
            //
            
            for (int i = ns.size() - 1; i >= 0; i--)
            {
                int v = ns[i];
                int r = query(v - 1);
                update(v, 1);
                ret.push_back(r);
            }
            reverse(ret.begin(), ret.end());
            return ret;
        }
    };
  • 相关阅读:
    Java中的基本数据类型以及自增特性总结
    mysql菜鸟
    Typora使用教程
    net core下链路追踪skywalking安装和简单使用
    netcore5下ocelot网关简单使用
    netcore热插拔dll
    快速排序
    netcore5下js请求跨域
    SpringBoot接口防刷
    EL 表达式
  • 原文地址:https://www.cnblogs.com/tonix/p/5048100.html
Copyright © 2011-2022 走看看