4
int multiply(int a, int b) {7
} else if (b % 2 == 0) {8
int ans = multiply(a, b / 2);9
return (ans % mod + ans % mod) % mod;11
int ans = multiply(a, b - 1);12
return (a % mod + ans % mod) % mod;15
int power(int b, int e) {18
} else if (e % 2 == 0) {19
int ans = power(b, e / 2);20
return multiply(ans, ans);22
int ans = power(b, e - 1);23
return multiply(b, ans);28
int numSubseq(vector<int> &nums, int target) {29
sort(nums.begin(), nums.end());30
int start = 0, end = 0;31
while (end < nums.size() and nums[start] + nums[end] <= target) {36
while (start <= end) {37
if (nums[start] + nums[end] <= target) {38
ans = (ans % mod + power(2, end - start)) % mod;