2025-11-20 学习日记

发布于 2025-11-20 12:00 586 字 3 min read 手写 每个字都是我自己敲的。

2025-12-24 学习日记2025-12-17 学习日记2025-12-14 学习日记2025-12-09 学习日记2025-12-08 学习日记2025-12-07 学习日记2025-12-06 学习日记2025-12-05 学习日记2025-12-04 学习日记2025-12-03 学习日记2025-12-02 学习日记2025-12-01 学习日记2025-11-30 学习日记2025-11-29 学习日记2025-11-28 学习日记2025-11-27 学习日记2025-11-26 学习日记2025-11-25 学习日记2025-11-24 学习日记2025-11-23 学习日记2025-11-22 学习日记2025-11-21 学习日记2025-11-20 学习日记2025-11-19 学习日记2025-11-18 学习日记2025-11-17 学习日记2025-11-16 学习日记2025-11-15 学习日记2025-11-14 学习日记2025-11-13 学习日记2025-11-12 学习日记2025-11-11 学习日记2025-11-10 学习日记2025-11-09 学习日记2025-11-08 学习日记2025-11-07 学习日记2025-11-06 学习日记2025-11-05 学习日记2025-11-04 学习日记2025-11-03 学习日记2025-11-02 学习日记2025-11-01 学习日记2025-10-31 学习日记2025-10-30 学习日记2025-10-29 学习日记2025-10-28 学习日记2025-10-27 学习日记2025-10-26 学习日记2025-10-25 学习日记2025-10-24 学习日记2025-10-23 学习日记2025-10-22 学习日记2025-10-21 学习日记2025-10-20 学习日记2025-10-19 学习日记2025-10-18 学习日记2025-10-17 学习日记2025-10-16 学习日记2025-10-15 学习日记2025-10-14 学习日记2025-10-13 学习日记2025-10-11 学习日记2025-10-10 学习日记2025-10-09 学习日记2025-10-03 学习日记2025-10-02 学习日记2025-10-01 学习日记2025-09-30 学习日记2025-09-29 学习日记2025-09-28 学习日记2025-09-27 学习日记2025-09-26 学习日记2025-09-25 学习日记2025-09-24 学习日记2025-09-23 学习日记2025-09-22 学习日记2025-09-21 学习日记2025-09-20 学习日记2025-09-18 学习日记2025-09-17 学习日记2025-09-16 学习日记2025-09-15 学习日记2025-09-14 学习日记2025-09-13 学习日记2025-09-12 学习日记2025-09-11 学习日记2025-09-10 学习日记2025-09-09 学习日记2025-09-08 学习日记2025-09-04 学习日记2025-09-03 学习日记2025-09-02 学习日记2025-09-01 学习日记2025-08-31 学习日记2025-08-29 学习日记2025-08-28 学习日记2025-08-27 学习日记2025-08-26 学习日记2025-08-25 学习日记2025-08-24 周记2025-08-23 学习日记2025-08-22 学习日记2025-08-21 学习日记2025-08-20 学习日记2025-08-19 学习日记2025-08-18 学习日记2025-08-17 周记2025-08-16 学习日记2025-08-15 学习日记2025-08-14 学习日记2025-08-13 学习日记2025-08-12 学习日记2025-08-11 学习日记
今日学习记录 1. 3748. 统计稳定子数组的数目 关键词: 问题分析: 找到单调递增的子序列数量,给出数组进行 n 次区段查询 核心思路: 可以分区段讨论,每个区段内的满足条件的子序列数量是固定的,所以可以提前算出每个递增区段的数量,可以分为三个区段计算 当查询都在同一个区间的时候,直接计算 r-l+1 长度的子序列数量...

今日学习记录

1. 3748. 统计稳定子数组的数目

关键词:前缀和 二分 问题分析: 找到单调递增的子序列数量,给出数组进行 n 次区段查询

核心思路: 可以分区段讨论,每个区段内的满足条件的子序列数量是固定的,所以可以提前算出每个递增区段的数量,可以分为三个区段计算 当查询都在同一个区间的时候,直接计算 r-l+1 长度的子序列数量 当查询在不同的区间时计算[l,第一个递减点]和[最后一个递减点,r]中间的就是固定的区间和,所以左右端点要单独处理,发现我们要记录的其实都是递减,所以我们只用记录左端点就行了,中间的区间已经计算过了,所以没必要再记录右端点 每次使用二分搜索查询上下界一样

**最终代码:

typedef long long ll;

class Solution {

public:

    vector<long long> countStableSubarrays(vector<int>& nums, vector<vector<int>>& queries) {

        int n = nums.size();

        vector<ll> left,sums = {0};

        int start = 0;

        for(int i = 0;i<n;i++){

            int x = nums[i];

            //i==n-1,把最后一个区段的开头装进去

            if(i==n-1||x>nums[i+1]){

                left.push_back(start);

                ll m = i-start+1;

                sums.push_back(sums.back()+m*(m+1)/2);

                start =  i+1;

            }

        }

        vector<ll> ans;

        for(auto &q:queries){

            int l = q[0],r = q[1];

            int i = ranges::upper_bound(left,l)-left.begin();

            int j = ranges::upper_bound(left,r)-left.begin();

            //一个区段中

            j--;

            if(i>j){

                ll m = r-l+1;

                ans.push_back(m*(m+1)/2);

            }

            else{

                //不同区段

                ll m = left[i] - l;

                ll m2 = r-left[j]+1;

                ans.push_back(m*(m+1)/2+(sums[j]-sums[i])+m2*(m2+1)/2);

            }

        }

        return ans;

    }

};

学到的点:

  1. 二分查找

执笔 手写

随机文章

加载中...