mirror of
https://gitee.com/coder-xiaomo/leetcode-problemset
synced 2025-09-04 15:01:40 +08:00
278 lines
11 KiB
HTML
278 lines
11 KiB
HTML
<p>You are given an integer array <code>nums</code>.</p>
|
|
|
|
<p>For any positive integer <code>x</code>, define the following sequence:</p>
|
|
|
|
<ul>
|
|
<li><code>p<sub>0</sub> = x</code></li>
|
|
<li><code>p<sub>i+1</sub> = popcount(p<sub>i</sub>)</code> for all <code>i >= 0</code>, where <code>popcount(y)</code> is the number of set bits (1's) in the binary representation of <code>y</code>.</li>
|
|
</ul>
|
|
|
|
<p>This sequence will eventually reach the value 1.</p>
|
|
|
|
<p>The <strong>popcount-depth</strong> of <code>x</code> is defined as the <strong>smallest</strong> integer <code>d >= 0</code> such that <code>p<sub>d</sub> = 1</code>.</p>
|
|
|
|
<p>For example, if <code>x = 7</code> (binary representation <code>"111"</code>). Then, the sequence is: <code>7 → 3 → 2 → 1</code>, so the popcount-depth of 7 is 3.</p>
|
|
|
|
<p>You are also given a 2D integer array <code>queries</code>, where each <code>queries[i]</code> is either:</p>
|
|
|
|
<ul>
|
|
<li><code>[1, l, r, k]</code> - <strong>Determine</strong> the number of indices <code>j</code> such that <code>l <= j <= r</code> and the <strong>popcount-depth</strong> of <code>nums[j]</code> is equal to <code>k</code>.</li>
|
|
<li><code>[2, idx, val]</code> - <strong>Update</strong> <code>nums[idx]</code> to <code>val</code>.</li>
|
|
</ul>
|
|
|
|
<p>Return an integer array <code>answer</code>, where <code>answer[i]</code> is the number of indices for the <code>i<sup>th</sup></code> query of type <code>[1, l, r, k]</code>.</p>
|
|
|
|
<p> </p>
|
|
<p><strong class="example">Example 1:</strong></p>
|
|
|
|
<div class="example-block">
|
|
<p><strong>Input:</strong> <span class="example-io">nums = [2,4], queries = [[1,0,1,1],[2,1,1],[1,0,1,0]]</span></p>
|
|
|
|
<p><strong>Output:</strong> <span class="example-io">[2,1]</span></p>
|
|
|
|
<p><strong>Explanation:</strong></p>
|
|
|
|
<table style="border: 1px solid black;">
|
|
<thead>
|
|
<tr>
|
|
<th style="border: 1px solid black;"><code>i</code></th>
|
|
<th style="border: 1px solid black;"><code>queries[i]</code></th>
|
|
<th style="border: 1px solid black;"><code>nums</code></th>
|
|
<th style="border: 1px solid black;">binary(<code>nums</code>)</th>
|
|
<th style="border: 1px solid black;">popcount-<br />
|
|
depth</th>
|
|
<th style="border: 1px solid black;"><code>[l, r]</code></th>
|
|
<th style="border: 1px solid black;"><code>k</code></th>
|
|
<th style="border: 1px solid black;">Valid<br />
|
|
<code>nums[j]</code></th>
|
|
<th style="border: 1px solid black;">updated<br />
|
|
<code>nums</code></th>
|
|
<th style="border: 1px solid black;">Answer</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td style="border: 1px solid black;">0</td>
|
|
<td style="border: 1px solid black;">[1,0,1,1]</td>
|
|
<td style="border: 1px solid black;">[2,4]</td>
|
|
<td style="border: 1px solid black;">[10, 100]</td>
|
|
<td style="border: 1px solid black;">[1, 1]</td>
|
|
<td style="border: 1px solid black;">[0, 1]</td>
|
|
<td style="border: 1px solid black;">1</td>
|
|
<td style="border: 1px solid black;">[0, 1]</td>
|
|
<td style="border: 1px solid black;">—</td>
|
|
<td style="border: 1px solid black;">2</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="border: 1px solid black;">1</td>
|
|
<td style="border: 1px solid black;">[2,1,1]</td>
|
|
<td style="border: 1px solid black;">[2,4]</td>
|
|
<td style="border: 1px solid black;">[10, 100]</td>
|
|
<td style="border: 1px solid black;">[1, 1]</td>
|
|
<td style="border: 1px solid black;">—</td>
|
|
<td style="border: 1px solid black;">—</td>
|
|
<td style="border: 1px solid black;">—</td>
|
|
<td style="border: 1px solid black;">[2,1]</td>
|
|
<td style="border: 1px solid black;">—</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="border: 1px solid black;">2</td>
|
|
<td style="border: 1px solid black;">[1,0,1,0]</td>
|
|
<td style="border: 1px solid black;">[2,1]</td>
|
|
<td style="border: 1px solid black;">[10, 1]</td>
|
|
<td style="border: 1px solid black;">[1, 0]</td>
|
|
<td style="border: 1px solid black;">[0, 1]</td>
|
|
<td style="border: 1px solid black;">0</td>
|
|
<td style="border: 1px solid black;">[1]</td>
|
|
<td style="border: 1px solid black;">—</td>
|
|
<td style="border: 1px solid black;">1</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<p>Thus, the final <code>answer</code> is <code>[2, 1]</code>.</p>
|
|
</div>
|
|
|
|
<p><strong class="example">Example 2:</strong></p>
|
|
|
|
<div class="example-block">
|
|
<p><strong>Input:</strong> <span class="example-io">nums = [3,5,6], queries = [[1,0,2,2],[2,1,4],[1,1,2,1],[1,0,1,0]]</span></p>
|
|
|
|
<p><strong>Output:</strong> <span class="example-io">[3,1,0]</span></p>
|
|
|
|
<p><strong>Explanation:</strong></p>
|
|
|
|
<table style="border: 1px solid black;">
|
|
<thead>
|
|
<tr>
|
|
<th style="border: 1px solid black;"><code>i</code></th>
|
|
<th style="border: 1px solid black;"><code>queries[i]</code></th>
|
|
<th style="border: 1px solid black;"><code>nums</code></th>
|
|
<th style="border: 1px solid black;">binary(<code>nums</code>)</th>
|
|
<th style="border: 1px solid black;">popcount-<br />
|
|
depth</th>
|
|
<th style="border: 1px solid black;"><code>[l, r]</code></th>
|
|
<th style="border: 1px solid black;"><code>k</code></th>
|
|
<th style="border: 1px solid black;">Valid<br />
|
|
<code>nums[j]</code></th>
|
|
<th style="border: 1px solid black;">updated<br />
|
|
<code>nums</code></th>
|
|
<th style="border: 1px solid black;">Answer</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td style="border: 1px solid black;">0</td>
|
|
<td style="border: 1px solid black;">[1,0,2,2]</td>
|
|
<td style="border: 1px solid black;">[3, 5, 6]</td>
|
|
<td style="border: 1px solid black;">[11, 101, 110]</td>
|
|
<td style="border: 1px solid black;">[2, 2, 2]</td>
|
|
<td style="border: 1px solid black;">[0, 2]</td>
|
|
<td style="border: 1px solid black;">2</td>
|
|
<td style="border: 1px solid black;">[0, 1, 2]</td>
|
|
<td style="border: 1px solid black;">—</td>
|
|
<td style="border: 1px solid black;">3</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="border: 1px solid black;">1</td>
|
|
<td style="border: 1px solid black;">[2,1,4]</td>
|
|
<td style="border: 1px solid black;">[3, 5, 6]</td>
|
|
<td style="border: 1px solid black;">[11, 101, 110]</td>
|
|
<td style="border: 1px solid black;">[2, 2, 2]</td>
|
|
<td style="border: 1px solid black;">—</td>
|
|
<td style="border: 1px solid black;">—</td>
|
|
<td style="border: 1px solid black;">—</td>
|
|
<td style="border: 1px solid black;">[3, 4, 6]</td>
|
|
<td style="border: 1px solid black;">—</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="border: 1px solid black;">2</td>
|
|
<td style="border: 1px solid black;">[1,1,2,1]</td>
|
|
<td style="border: 1px solid black;">[3, 4, 6]</td>
|
|
<td style="border: 1px solid black;">[11, 100, 110]</td>
|
|
<td style="border: 1px solid black;">[2, 1, 2]</td>
|
|
<td style="border: 1px solid black;">[1, 2]</td>
|
|
<td style="border: 1px solid black;">1</td>
|
|
<td style="border: 1px solid black;">[1]</td>
|
|
<td style="border: 1px solid black;">—</td>
|
|
<td style="border: 1px solid black;">1</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="border: 1px solid black;">3</td>
|
|
<td style="border: 1px solid black;">[1,0,1,0]</td>
|
|
<td style="border: 1px solid black;">[3, 4, 6]</td>
|
|
<td style="border: 1px solid black;">[11, 100, 110]</td>
|
|
<td style="border: 1px solid black;">[2, 1, 2]</td>
|
|
<td style="border: 1px solid black;">[0, 1]</td>
|
|
<td style="border: 1px solid black;">0</td>
|
|
<td style="border: 1px solid black;">[]</td>
|
|
<td style="border: 1px solid black;">—</td>
|
|
<td style="border: 1px solid black;">0</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<p>Thus, the final <code>answer</code> is <code>[3, 1, 0]</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], queries = [[1,0,1,1],[2,0,3],[1,0,0,1],[1,0,0,2]]</span></p>
|
|
|
|
<p><strong>Output:</strong> <span class="example-io">[1,0,1]</span></p>
|
|
|
|
<p><strong>Explanation:</strong></p>
|
|
|
|
<table style="border: 1px solid black;">
|
|
<thead>
|
|
<tr>
|
|
<th style="border: 1px solid black;"><code>i</code></th>
|
|
<th style="border: 1px solid black;"><code>queries[i]</code></th>
|
|
<th style="border: 1px solid black;"><code>nums</code></th>
|
|
<th style="border: 1px solid black;">binary(<code>nums</code>)</th>
|
|
<th style="border: 1px solid black;">popcount-<br />
|
|
depth</th>
|
|
<th style="border: 1px solid black;"><code>[l, r]</code></th>
|
|
<th style="border: 1px solid black;"><code>k</code></th>
|
|
<th style="border: 1px solid black;">Valid<br />
|
|
<code>nums[j]</code></th>
|
|
<th style="border: 1px solid black;">updated<br />
|
|
<code>nums</code></th>
|
|
<th style="border: 1px solid black;">Answer</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td style="border: 1px solid black;">0</td>
|
|
<td style="border: 1px solid black;">[1,0,1,1]</td>
|
|
<td style="border: 1px solid black;">[1, 2]</td>
|
|
<td style="border: 1px solid black;">[1, 10]</td>
|
|
<td style="border: 1px solid black;">[0, 1]</td>
|
|
<td style="border: 1px solid black;">[0, 1]</td>
|
|
<td style="border: 1px solid black;">1</td>
|
|
<td style="border: 1px solid black;">[1]</td>
|
|
<td style="border: 1px solid black;">—</td>
|
|
<td style="border: 1px solid black;">1</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="border: 1px solid black;">1</td>
|
|
<td style="border: 1px solid black;">[2,0,3]</td>
|
|
<td style="border: 1px solid black;">[1, 2]</td>
|
|
<td style="border: 1px solid black;">[1, 10]</td>
|
|
<td style="border: 1px solid black;">[0, 1]</td>
|
|
<td style="border: 1px solid black;">—</td>
|
|
<td style="border: 1px solid black;">—</td>
|
|
<td style="border: 1px solid black;">—</td>
|
|
<td style="border: 1px solid black;">[3, 2]</td>
|
|
<td style="border: 1px solid black;"> </td>
|
|
</tr>
|
|
<tr>
|
|
<td style="border: 1px solid black;">2</td>
|
|
<td style="border: 1px solid black;">[1,0,0,1]</td>
|
|
<td style="border: 1px solid black;">[3, 2]</td>
|
|
<td style="border: 1px solid black;">[11, 10]</td>
|
|
<td style="border: 1px solid black;">[2, 1]</td>
|
|
<td style="border: 1px solid black;">[0, 0]</td>
|
|
<td style="border: 1px solid black;">1</td>
|
|
<td style="border: 1px solid black;">[]</td>
|
|
<td style="border: 1px solid black;">—</td>
|
|
<td style="border: 1px solid black;">0</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="border: 1px solid black;">3</td>
|
|
<td style="border: 1px solid black;">[1,0,0,2]</td>
|
|
<td style="border: 1px solid black;">[3, 2]</td>
|
|
<td style="border: 1px solid black;">[11, 10]</td>
|
|
<td style="border: 1px solid black;">[2, 1]</td>
|
|
<td style="border: 1px solid black;">[0, 0]</td>
|
|
<td style="border: 1px solid black;">2</td>
|
|
<td style="border: 1px solid black;">[0]</td>
|
|
<td style="border: 1px solid black;">—</td>
|
|
<td style="border: 1px solid black;">1</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<p>Thus, the final <code>answer</code> is <code>[1, 0, 1]</code>.</p>
|
|
</div>
|
|
|
|
<p> </p>
|
|
<p><strong>Constraints:</strong></p>
|
|
|
|
<ul>
|
|
<li><code>1 <= n == nums.length <= 10<sup>5</sup></code></li>
|
|
<li><code>1 <= nums[i] <= 10<sup>15</sup></code></li>
|
|
<li><code>1 <= queries.length <= 10<sup>5</sup></code></li>
|
|
<li><code>queries[i].length == 3</code> or <code>4</code>
|
|
<ul>
|
|
<li><code>queries[i] == [1, l, r, k]</code> or,</li>
|
|
<li><code>queries[i] == [2, idx, val]</code></li>
|
|
<li><code>0 <= l <= r <= n - 1</code></li>
|
|
<li><code>0 <= k <= 5</code></li>
|
|
<li><code>0 <= idx <= n - 1</code></li>
|
|
<li><code>1 <= val <= 10<sup>15</sup></code></li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|