标签:
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; } };
LintCode "Count of Smaller Number"
标签:
原文地址:http://www.cnblogs.com/tonix/p/4850797.html