算法-二分与差分-503.借教室

题目

思路

  1. 代码不超时:限制在10的8次方以内;线段树能处理的数据上限是10^5
  2. 二分:具有二段性,第一个订单不满足,后面的订单也不用去考虑
  3. 差分(前缀和的逆运算):题目的要求是将一个区间整体减去一个数,最终去判断是否存在某个数小于零
  4. 二分完之后利用差分将前面若干个订单判断一遍,如果前面存在订单小于0,说明不满足
  5. AcWing 503. 借教室(寒假每日一题) - AcWing

代码

python 复制代码
n, m = map(int, input().split())
r = [0] + list(map(int, input().split()))
d = [0] * (m+5)  
s = [0] * (m+5)  
t = [0] * (m+5)  
b = [] 

def check(mid):
    b = [0] * (n+5)  # 将 b 初始化为与 r 相同长度的列表,并全部填充为 0
    for i in range(1, n+1):
        b[i] = r[i] - r[i-1]  # 差分数组的初始化
    for i in range(1, mid+1):  # 处理前 mid 个订单
        b[s[i]] -= d[i]  # 有订单之后,区间的值要减少 d[i]
        b[t[i] + 1] += d[i]  # 差分的基本操作
    for i in range(1, n+1):  # 求差分数组的前缀和,相当于求原数组
        b[i] += b[i-1]
        if b[i] < 0:
            return False  # 说明订单不能满足
    return True

for i in range(1, m+1):
    d[i], s[i], t[i] = map(int, input().split())

L, R = 1, m
while L < R:
    mid = (L + R) >> 1
    if check(mid)==False:
        R = mid
    else:
        L = mid + 1  
if check(m) :
    print("0")
else :
    print("-1")
    print(R)
相关推荐
2601_962297252 分钟前
Authlib 0.13通用Python认证授权库wheel安装包(支持Python 2/3)
python·jwt·oauth2.0·authlib·openidconnect
SamChan903 分钟前
大文件多语言PDF翻译性能实测:300页文档的耗时、内存占用与失败率分析
python·ai·pdf·机器翻译
GIS数据转换器14 分钟前
遥感GIS一体化技术应用平台
大数据·人工智能·python·安全·数据挖掘
2601_9669496524 分钟前
批量 K 线不只是提速:因子研究中的数据质量、复权与回测偏差
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
一位正在转型AI全栈的前端工程师25 分钟前
AI 全栈学习之旅 -Week 11:从 CLI 到浏览器:用 FastAPI、SSE 和 Vue 3 做一个可审核的 ReAct Agent
前端·python
洛阳纸贵31 分钟前
AI-PyTorch(一)基础代码实操和自动求导
人工智能·pytorch·python
2601_9622845039 分钟前
uv:终结 Python 虚拟环境管理乱局
python·项目管理·uv·虚拟环境·依赖管理
Bmob后端云1 小时前
Bmob后端云实战|Python给备忘录接入AI摘要、文本润色功能
算法·github
Patrick在香港1 小时前
Claude + Python 数据管道:一次字段改名,786 行历史数据被静默重写
开发语言·windows·python·claude·数据工程·数据校验·数据管道
小鱼干..1 小时前
CTFHub技能树-ssrf-URL Bypass
算法