Description

Submission
class Solution {
typedef long long ll;
const ll M = 1e9+7;
int mem[100005];
public:
int numSubseq(vector<int>& nums, int target) {
sort(nums.begin(), nums.end());
int n = nums.size();
mem[0] = 1;
for(int i = 1; i < n; ++i) {
mem[i] = (mem[i-1] << 1) % M;
}
ll ret = 0;
for(auto it = nums.begin(); it != nums.end(); ++it) {
auto up = upper_bound(nums.begin(), nums.end(), target-*it);
if(up <= it) break;
ret += mem[up-it-1];
ret %= M;
}
return ret;
}
};
