<p>Given an array of integers <code>nums</code> and an integer <code>k</code>, return the number of <span data-keyword="subarray-nonempty">subarrays</span> of <code>nums</code> where the bitwise <code>AND</code> of the elements of the subarray equals <code>k</code>.</p>

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

<div class="example-block">
<p><strong>Input:</strong> <span class="example-io">nums = [1,1,1], k = 1</span></p>

<p><strong>Output:</strong> <span class="example-io">6</span></p>

<p><strong>Explanation:</strong></p>

<p>All subarrays contain only 1&#39;s.</p>
</div>

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

<div class="example-block">
<p><strong>Input:</strong> <span class="example-io">nums = [1,1,2], k = 1</span></p>

<p><strong>Output:</strong> <span class="example-io">3</span></p>

<p><strong>Explanation:</strong></p>

<p>Subarrays having an <code>AND</code> value of 1 are: <code>[<u><strong>1</strong></u>,1,2]</code>, <code>[1,<u><strong>1</strong></u>,2]</code>, <code>[<u><strong>1,1</strong></u>,2]</code>.</p>
</div>

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

<div class="example-block">
<p><strong>Input:</strong> <span class="example-io">nums = [1,2,3], k = 2</span></p>

<p><strong>Output:</strong> <span class="example-io">2</span></p>

<p><strong>Explanation:</strong></p>

<p>Subarrays having an <code>AND</code> value of 2 are: <code>[1,<b><u>2</u></b>,3]</code>, <code>[1,<u><strong>2,3</strong></u>]</code>.</p>
</div>

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

<ul>
	<li><code>1 &lt;= nums.length &lt;= 10<sup>5</sup></code></li>
	<li><code>0 &lt;= nums[i], k &lt;= 10<sup>9</sup></code></li>
</ul>

class Solution:
    def countSubarrays(self, nums: List[int], k: int) -> int:
        ans = [[]]
        for i in nums:
            if i&k==k:
                ans[-1].append(i&(~k))
            else:
                if ans[-1]:ans.append([])
        if not ans[-1]:del ans[-1]
        def get_for(arr):
            dct = defaultdict(int)
            def populate(val):
                i = 0
                while val:
                    bb = val%2
                    val = val>>1
                    dct[i]+=bb
                    i+=1
            def remove(val):
                i = 0
                while val:
                    bb = val%2
                    val = val>>1
                    dct[i]-=bb
                    i+=1
            def check(dis):
                for ii in dct:
                    if dct[ii]==dis:return False
                return True
            j = 0
            ans = 0
            for i in range(len(arr)):
                while j<len(arr):
                    if j>i and check(j-i):break
                    populate(arr[j])
                    j += 1
                    #if check(j-i):break
                #print(arr,i,j-1)
                if check(j-i):ans += len(arr)-(j-1)
                remove(arr[i])
            return ans
                
        anss = 0
        #print(ans)
        for i in ans:anss+=get_for(i)
        return anss
        
2076