tuanio's blog

By tuanio, history, 3 years ago, In English

Hello guys, i have a question like this. Given an array has length n, n <= 10^7, a[i] <= 10^9. Number K <= 10^9. How i can count number of subarray has average sum equal to K. Thanks for your time.

  • Vote: I like it
  • +3
  • Vote: I do not like it

| Write comment?
»
3 years ago, # |
  Vote: I like it 0 Vote: I do not like it

Observe that decreasing every element $$$k$$$ will also decrease the average by $$$k$$$. Thus, if every element in the array is decreased by $$$k$$$, then the answer is equal to the number of subarrays with an average (or equivalently sum) of $$$0$$$.

Consider the prefix sum array $$$p$$$ generated by this new array. It is clear that the subarray $$$[l, r]$$$ has a sum of $$$0$$$ iff $$$p[l-1] = p[r]$$$.

The problem is now reduced to: given an array, count the number of equal pairs. This can be trivially solved by iterating through the array using an unordered_map, and can be solved in $$$O(n)$$$ time.