How this can be solved faster than O(N^2) without using Binary indexed tree (O(NlogN), but Memory Out Limit)
arr = [6, 2, 3, 5, 1, 6], l = 5, h = 7
Find number of pairs i, j such that i < j && (arr[i] arr[j] >= l && arr[i] arr[j] <= r)
O(N^2) solution is very straight-forward, but TLE.
What I tried:
- Using Binary Indexed Tree, but get Memory Limit Exceeded.
Anyone has ideas?
CodePudding user response:
Sort the array in ascending order and, for each i, binary search (in (i , n]) the first j for which the first condition is true. Let it be j1. Then, binary search (again in (i, n]) the last j for which the second condition is true. Let it be j2. If everything is ok, add |j2 - j1 1| to the answer.
The overall time complexity is O(n * log n) and the memory complexity is O(n).
