zoukankan      html  css  js  c++  java
  • LintCode "Count of Smaller Number"

    Fenwick Tree is perfect for this problem, though space complexity is not quite efficient.

    class Solution {
        //////////////////
        // Fenwick Tree //
        vector<int> ft;
        void update(int i, int x)
        {
            if((i + 1) > ft.size()) return;
            for (; i < ft.size(); i += (i & -i))
                ft[i] += x;
        }
        
        int query(int i)
        { 
            i = min(i, int(ft.size() - 1));
            int s = 0;  
            for (; i > 0; i -= (i & -i)) 
                s += ft[i];  
            return s; 
        }
        //////////////////
    public:
       /**
         * @param A: An integer array
         * @return: The number of element in the array that 
         *          are smaller that the given integer
         */
        vector<int> countOfSmallerNumber(vector<int> &A, vector<int> &queries) {
            int maxNo = 0;
            if(A.size() > 0)
            {
                maxNo = *max_element(A.begin(), A.end());
            }
            ft.assign(maxNo + 1, 0); // memory complexity may not be good
            
            for(auto v : A)
            {
                update(v, 1);
            }
            
            vector<int> ret;
            for(auto i : queries)
            {
                int r = query(i - 1);
                ret.push_back(r);
            }
            return ret;
        }
    };
  • 相关阅读:
    hdu 4525(数学)
    hdu 4524(模拟)
    hdu 4523(大整数)
    hdu 4517(递推枚举统计)
    hdu 4520
    hdu 4519(数学题)
    hdu 4514(树的直径+并查集)
    hdu 4510(模拟)
    hdu 2089(数位DP)
    hdu 4506(数学,循环节+快速幂)
  • 原文地址:https://www.cnblogs.com/tonix/p/4850797.html
Copyright © 2011-2022 走看看