![]() |
VOOZH | about |
Given an array 'a[]' and number of queries q there will be two type of queries
Given a[i], v <= 10000 Examples :
Input : arr[] = {5, 1, 2, 3, 4}
q = 6
1 1 3 1 // First value 1 means type of query is count()
0 3 10 // First value 0 means type of query is update()
1 3 3 4
0 2 1
0 0 2
1 0 4 5
Output :
1
0
4
For first query number of values less than equal to 1 in
arr[1..3] is 1(1 only), update a[3] = 10
There is no value less than equal to 4 in the a[3..3]
and similarly other queries are answered
We have discussed a solution that handles only count() queries in below post.Number of elements less than or equal to a given number in a given subarray Here update() query also needs to be handled. Naive Approach The naive approach is whenever there is update operation update the array and whenever type 2 query is there traverse the subarray and count the valid elements. Efficient Approach The idea is to use square root decomposition
Output:
1 0 4
Time Complexity: O(n log(max_element))
Space Complexity: O(sqrt(n) log(max_element))
The question is know why not to use this method when there were no update operations the answer lies in space complexity in this method 2-d bit array is used as well as its size depends upon the maximum possible value of the array but when there was no update operation our bit array was only dependent on the size of array.