4017. Peaks in Array II
Description
You are given an integer array nums of length n and a 2D integer array queries.
A subarray nums[i..j] is called a peak subarray if:
- Its length is at least 3.
- There exists an index
ksuch thati < k < jand:nums[k] > nums[k - 1]nums[k] > nums[k + 1]
You have to process queries of two types:
[1, li, ri]: Calculate the number of peak subarrays fully contained withinnums[li..ri].[2, indexi, vali]: Updatenums[indexi]tovali. This update applies to all subsequent queries.
Return an array answer, where answer[i] is the answer to the ith query of type 1 in the order they appear.
Β
Example 1:
Input: nums = [1,3,2,4], queries = [[1,0,3],[2,1,1],[1,0,3]]
Output: [2,0]
Explanation:βββββββ
- Query
[1, 0, 3]:[1, 3, 2]: choosek = 1. Thennums[k] = 3,nums[k - 1] = 1, andnums[k + 1] = 2. Since3 > 1and3 > 2, this is a peak subarray.[1, 3, 2, 4]: choosek = 1. Thennums[k] = 3,nums[k - 1] = 1, andnums[k + 1] = 2. Since3 > 1and3 > 2, this is a peak subarray.
- Query
[2, 1, 1]: Updatenums[1]to 1. The array becomes[1, 1, 2, 4]. - Query
[1, 0, 3]: There are no peak subarrays now. - Thus,
answer = [2, 0].
Example 2:
Input: nums = [9,8,9,8], queries = [[1,1,3],[2,2,1],[1,0,2]]
Output: [1,0]
Explanation:
- Query
[1, 1, 3]:nums[1..3] = [8, 9, 8]: choosek = 2. Thennums[k] = 9,nums[k - 1] = 8, andnums[k + 1] = 8. Since9 > 8and9 > 8, this is a peak subarray.
- Query
[2, 2, 1]: Updatenums[2]to 1. The array becomes[9, 8, 1, 8]. - Query
[1, 0, 2]: There are no peak subarrays. - Thus,
answer = [1, 0].
Example 3:
Input: nums = [3,6,2,7,1], queries = [[1,1,3],[2,3,0],[1,0,4]]
Output: [0,3]
Explanation:
- Query
[1, 1, 3]: The only subarray of length at least 3 is[6, 2, 7]. Its only possible peak index isk = 2, butnums[2] = 2is less than bothnums[1] = 6andnums[3] = 7, so it is not a peak subarray. - Query
[2, 3, 0]: Updatenums[3]to 0. The array becomes[3, 6, 2, 0, 1]. - Query
[1, 0, 4]:[3, 6, 2]: choosek = 1. Thennums[k] = 6,nums[k - 1] = 3, andnums[k + 1] = 2. Since6 > 3and6 > 2, this is a peak subarray.[3, 6, 2, 0]: choosek = 1. Thennums[k] = 6,nums[k - 1] = 3, andnums[k + 1] = 2. Since6 > 3and6 > 2, this is a peak subarray.[3, 6, 2, 0, 1]: choosek = 1. Thennums[k] = 6,nums[k - 1] = 3, andnums[k + 1] = 2. Since6 > 3and6 > 2, this is a peak subarray.
- Thus,
answer = [0, 3].
Β
Constraints:
3 <= n == nums.length <= 1050 <= nums[i] <= 1051 <= queries.length <= 105queries[i] = [1, li, ri]orqueries[i] = [2, indexi, vali]0 <= li < ri <= n - 10 <= indexi <= n - 10 <= vali <= 105
Solutions
Solution 1
1 | |
1 | |
1 | |
1 | |