LeetCode 315. 计算右侧小于当前元素的个数

LeetCode 315. 计算右侧小于当前元素的个数
LeetCode 315. 计算右侧小于当前元素的个数_第1张图片
数组

const int N = 2 * 1e4 + 10;
class Solution {
public:
    int tr[N];
    int n;
    int lowbit(int x)
    {
        return x & -x;
    }
    void add(int x, int c)
    {
        for(int i = x; i <= N; i += lowbit(i))
            tr[i] += c;
    }
    int query(int x)
    {
        int res = 0;
        for(int i = x; i; i -= lowbit(i))
            res += tr[i];
        return res;
    }
    vector<int> countSmaller(vector<int>& nums) {
        n = nums.size() ;
        vector<int> res(n);
        for(int i = n - 1; i >= 0; i --)
        {
            int x = nums[i] + 10001;
            res[i] = query(x - 1); //查询比当前值小的个数
            add(x, 1);//加到数组中
        }
        return res;
    }
};

你可能感兴趣的:(算法,leetcode,算法,数据结构)