<p>Given a <code>m x n</code> matrix <code>grid</code> which is sorted in non-increasing order both row-wise and column-wise, return <em>the number of <strong>negative</strong> numbers in</em> <code>grid</code>.</p>

<p>&nbsp;</p>
<p><strong class="example">Example 1:</strong></p>

<pre>
<strong>Input:</strong> grid = [[4,3,2,-1],[3,2,1,-1],[1,1,-1,-2],[-1,-1,-2,-3]]
<strong>Output:</strong> 8
<strong>Explanation:</strong> There are 8 negatives number in the matrix.
</pre>

<p><strong class="example">Example 2:</strong></p>

<pre>
<strong>Input:</strong> grid = [[3,2],[1,0]]
<strong>Output:</strong> 0
</pre>

<p>&nbsp;</p>
<p><strong>Constraints:</strong></p>

<ul>
	<li><code>m == grid.length</code></li>
	<li><code>n == grid[i].length</code></li>
	<li><code>1 &lt;= m, n &lt;= 100</code></li>
	<li><code>-100 &lt;= grid[i][j] &lt;= 100</code></li>
</ul>

<p>&nbsp;</p>
<strong>Follow up:</strong> Could you find an <code>O(n + m)</code> solution?
class Solution {
public:
    int min_nonneg_index(vector<int>& nums, int high){
        //return index of minimumm non negative value
        //find index of smallest number >=0
        //target = 0;
        int mid, low=0;

        if(nums[0] < 0) return -1;
        if(nums[high] >= 0) return high;

        while(low<=high){
            mid = (low+high)/2;

            if(nums[mid] < 0){
                if(nums[mid-1] >=0) return mid-1;
                else high = mid-1;
            }
            else{
                low = mid+1;
            }
        }

        return -1;

    }

    int countNegatives(vector<vector<int>>& grid) {
        int m = grid.size(), n= grid[0].size();
        int high = n-1;
        int num = 0;

        for(int i=0; i<m; i++){
            int tmp = min_nonneg_index(grid[i], high);
            num += n -1 - tmp;
        }

        return num;
    }
};
13000