• 《六月集训》(第二十四天)——线段树


    前言

            欢迎大家积极在评论区留言发表自己的看法,知无不言,言无不尽,养成每天刷题的习惯,也可以自己发布优质的解题报告,供社区一同鉴赏,吸引一波自己的核心粉丝。
            今天是六月集训第二十四天:线段树🔥🔥🔥🔥🔥
    在这里插入图片描述

    一、练习题目

            731. 我的日程安排表 II
            699. 掉落的方块

    二、算法思路

    • 1、731. 我的日程安排表 II:利用差分的思想来做的题,再复习一遍差分思想吧,还没用线段树。🔥🔥🔥🔥🔥
        1.差分数组的定义
        假设有数组A,我们将数组A中的每一项与前一项的差值组成的新数组F称为差分数组。对于F显然有:
      F [ i ] = { A [ i ] ( i = 0 ) A [ i ] − A [ i − 1 ] ( i > 0 ) F[i]=
      {A[i](i=0)A[i]A[i1](i>0)
      F[i]={A[i](i=0)A[i]A[i1](i>0)

      举例:
    01234567
    A[i]100101102103104105106107
    F[i]1001111111

       2.差分数组特性

       计算数列各项的值:数列第i项的值是可以用差分数组的前i项和计算得到,即前缀和。 A [ i ] = F [ i ] + A [ i − 1 ] A[i] = F[i] + A[i-1] A[i]=F[i]+A[i1]
      快速执行区间的加减操作:比如数组A的1~5项都增加1:

    01234567
    A[i]101102103104105106106107
    F[i]1002111111

    可以发现规律了,差分数组F只改变了两边端点的值,在左闭右开的区间内,即上面的例子是:[1,6),起始端点加1,结尾端减1。
       3.差分数组应用
       结合此题来进行说明:我们要为每一个日期进行安排,每个日期安排的数组数量表示为数组AF表示差分数组。

    12345678
    A[i]00000000
    F[i]00000000

    执行A(1,5)后,根据题意start=1,end=5:

    12345678
    A[i]11110000
    F[i]1000-1000

    可以发现规律了,差分数组F只改变了两边端点的值,在左闭右开的区间内,即上面的例子是:[1,5),起始端点加1,结尾端减1。

    • 2、699. 掉落的方块:困难题🔥🔥🔥🔥🔥

    三、源码剖析

    // 731. 我的日程安排表 II
    class MyCalendarTwo {
        map<int, int> cnt;
    public:
        MyCalendarTwo() {
            cnt.clear();
        }
        
        bool book(int start, int end) {
            ++cnt[start];
            --cnt[end];
            int sum = 0;
            for(auto i : cnt) {
                sum += i.second;
                if(sum > 2) {
                    --cnt[start];
                    ++cnt[end];
                    return false;
                }
            }
            return true;
        }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 1、见思路详解。
    // 699. 掉落的方块
    
    
    • 1
    • 2
    • 1、
  • 相关阅读:
    巨神奇,2013年的老Mac,竟直接装上macOS Ventura 13.1 Beta版
    VMware-克隆虚拟机
    [附源码]计算机毕业设计医院门诊管理信息系统Springboot程序
    2024hw蓝队面试题--6
    Kubernetes(29):Kubernetes Dashboard的使用
    k8s实践总结
    Spring Boot 内置工具类介绍
    【Taro3踩坑日记】不存在全局配置文件:C:\Users\TYW\.taro-global-config\index.json
    ip报头和ip报文切片组装问题
    基于AI智能识别技术的智慧展览馆视频监管方案设计
  • 原文地址:https://blog.csdn.net/weixin_42396991/article/details/125438874