线段树二分

lc2286

线段树二分

class BookMyShow {
int n, m;
vector<int> mn;
vector<long long> sum;

// 把下标 i 上的元素值增加 val
void update(int o, int l, int r, int i, int val) {
if (l == r) {
mn[o] += val;
sum[o] += val;
return;
}
int m = (l + r) / 2;
if (i <= m) {
update(o * 2, l, m, i, val);
} else {
update(o * 2 + 1, m + 1, r, i, val);
}
mn[o] = min(mn[o * 2], mn[o * 2 + 1]);
sum[o] = sum[o * 2] + sum[o * 2 + 1];
}

// 返回区间 [L,R] 内的元素和
long long querySum(int o, int l, int r, int L, int R) {
if (L <= l && r <= R) {
return sum[o];
}
long long res = 0;
int m = (l + r) / 2;
if (L <= m) {
res = querySum(o * 2, l, m, L, R);
}
if (R > m) {
res += querySum(o * 2 + 1, m + 1, r, L, R);
}
return res;
}

// 返回区间 [0,R] 中 <= val 的最靠左的位置,不存在时返回 -1
int findFirst(int o, int l, int r, int R, int val) {
if (mn[o] > val) {
return -1; // 整个区间的元素值都大于 val
}
if (l == r) {
return l;
}
int m = (l + r) / 2;
if (mn[o * 2] <= val) {
return findFirst(o * 2, l, m, R, val);
}
if (R > m) {
return findFirst(o * 2 + 1, m + 1, r, R, val);
}
return -1;
}

public:
BookMyShow(int n, int m) : n(n), m(m), mn(4 << __lg(n)), sum(4 << __lg(n)) {}

vector<int> gather(int k, int maxRow) {
// 找第一个能倒入 k 升水的水桶
int r = findFirst(1, 0, n - 1, maxRow, m - k);
if (r < 0) { // 没有这样的水桶
return {};
}
int c = querySum(1, 0, n - 1, r, r);
update(1, 0, n - 1, r, k); // 倒水
return {r, c};
}

bool scatter(int k, int maxRow) {
// [0,maxRow] 的接水量之和
long long s = querySum(1, 0, n - 1, 0, maxRow);
if (s > (long long) m * (maxRow + 1) - k) {
return false; // 水桶已经装了太多的水
}
// 从第一个没有装满的水桶开始
int i = findFirst(1, 0, n - 1, maxRow, m - 1);
while (k) {
int left = min(m - (int) querySum(1, 0, n - 1, i, i), k);
update(1, 0, n - 1, i, left); // 倒水
k -= left;
i++;
}
return true;
}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1141213.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

windows clion MingW cmake 编译运行 FreeRTOS

说明 在 windows 平台上&#xff0c;使用 clion IDE&#xff0c;cmake 方式编译 FreeRTOS&#xff0c;编译工具链使用 MingW gcc 下载 FreeRTOS可以只下载 FreeRTOS-Kernel&#xff0c;也可以下载整个 FreeRTOS&#xff08;包括 git 子模块&#xff0c;体积较大&#xff09;htt…

构建高并发AI服务网关:C++与gRPC的工程实践

随着AI服务在企业中的规模化部署&#xff0c;如何高效、可靠地将多个异构AI模型集成到统一的服务架构中&#xff0c;成为后端工程师面临的重要挑战。本文介绍基于C与gRPC构建高并发AI服务网关的完整实践方案&#xff0c;涵盖架构设计、性能优化、容错机制等关键环节。 1. 问题背…

Java后端实习高频考点深度解析:美团27届后端开发二面全真复盘(限流·负载均衡·消息队列·链表分割)

Java后端实习高频考点深度解析&#xff1a;美团27届后端开发二面全真复盘&#xff08;限流负载均衡消息队列链表分割&#xff09; 阅读建议&#xff1a;本文适合准备大厂后端实习/校招的同学精读&#xff0c;建议配合动手实践与源码阅读&#xff0c;效果更佳。 在竞争日益激烈的…

AI 技能工程入门:从独立能力到协作生态

随着大型语言模型&#xff08;LLM&#xff09;能力的飞速发展&#xff0c;如何让它们稳定、高效地执行复杂任务&#xff0c;已成为AI工程化的核心挑战。作为应对&#xff0c;“技能”&#xff08;Skills&#xff09; 作为一种新兴的AI能力封装范式应运而生&#xff0c;而由其引…

提示工程架构实战:小样本场景下的模型压缩方案

提示工程架构实战:小样本场景下的模型压缩方案设计与落地 摘要/引言:小样本时代,我们需要怎样的模型压缩? 你有没有遇到过这样的困境? 为了做一个移动端的图像分类应用,你选了轻量级模型ViT-Tiny,但用5张图/类的小样本数据训练后,准确率勉强到70%;想再压缩模型大小(…

蟑螂的种类与预防方法

冬天来了&#xff0c;温度降到10以下&#xff0c;蚊子不见了&#xff0c;但是蟑螂却到处横行。有时候&#xff0c;打开包裹&#xff0c;或者移动沙发&#xff0c;突然窜出黄色的小颗粒&#xff0c;仔细一看&#xff0c;原来是蟑螂。这里介绍蟑螂的种类与预防方法。图(1) 蟑螂的…

Java版LeetCode热题100之滑动窗口最大值:从暴力解法到工业级最优解的深度剖析

Java版LeetCode热题100之滑动窗口最大值&#xff1a;从暴力解法到工业级最优解的深度剖析前言&#xff1a;为什么这道题值得深入研究&#xff1f; 在 LeetCode 热题 100 的榜单中&#xff0c;「滑动窗口最大值」&#xff08;LeetCode 239&#xff09;是一道极具代表性的算法题。…

大数据领域OLAP的用户权限管理

大数据OLAP权限管理&#xff1a;如何给数据加一把“智能锁”&#xff1f; 关键词&#xff1a;OLAP 权限管理 行列级权限 RBAC 数据安全 大数据 动态权限 摘要&#xff1a;在大数据时代&#xff0c;OLAP&#xff08;在线分析处理&#xff09;就像一个“数据超市”&#xff0c;让…

蓝牙低功蓝牙LTK跟传统蓝牙LinkKey互转技术介绍,Cross-transport key derivation(CTKD)

一. 概念 1. 概念 蓝牙CTKD是蓝牙4.2版本引入的一种交叉传输密钥派生的安全机制&#xff0c;全称 Cross-transport key derivation&#xff0c;主要用在蓝牙双模设备上&#xff0c;它可以跨越BLE和BT的边界&#xff0c;通过将BLE配对生成的LTK转化成BT配对的LinkKey&#xff…

亚马逊Java后端开发一面深度复盘:16道系统设计与底层原理高频题全解析(附工业级解决方案)

亚马逊Java后端开发一面深度复盘&#xff1a;16道系统设计与底层原理高频题全解析&#xff08;附工业级解决方案&#xff09;阅读建议&#xff1a;本文适合准备大厂后端岗位&#xff08;尤其是亚马逊、AWS、微软等外企&#xff09;的同学精读。建议结合动手实验与源码阅读&…

人机协作新模式:程序员与AI的共生关系

人机协作新模式:程序员与AI的共生关系 关键词:人机协作、程序员、AI、共生关系、编程效率、代码质量 摘要:本文深入探讨了程序员与AI之间的共生关系这一全新的人机协作模式。首先介绍了该研究的背景、目的、预期读者等内容。接着阐述了人机协作相关的核心概念与联系,分析了…

彼得林奇对公司并购后文化整合成功率的评估

彼得林奇对公司并购后文化整合成功率的评估 关键词:彼得林奇、公司并购、文化整合成功率、评估方法、企业管理 摘要:本文聚焦于彼得林奇对公司并购后文化整合成功率的评估。首先介绍了相关背景,包括研究目的、预期读者、文档结构和术语表。接着阐述了核心概念,如公司并购、…

MobaXterm高效运维实战技术文章大纲快速执行重复命令)

MobaXterm高效运维实战技术文章大纲简介MobaXterm的核心功能与优势&#xff08;SSH、X11、远程桌面、文件传输等&#xff09;适用场景&#xff1a;Windows平台下的Linux运维、开发调试、网络管理基础配置与优化安装与初始设置&#xff08;便携版与安装版的选择&#xff09;会话…

Hive执行模式对比:本地模式 vs 集群模式

Hive执行模式对比&#xff1a;本地模式 vs 集群模式的终极对决 关键词 Hive、本地模式、集群模式、大数据处理、执行计划、MapReduce、资源调度 摘要 作为Hadoop生态中最常用的数据仓库工具&#xff0c;Hive的执行模式选择直接影响着数据处理的效率与资源消耗。本文将通过&…

金融领域大数据文本挖掘实战案例解析

金融领域大数据文本挖掘实战案例解析&#xff1a;从海量噪音中提炼真金白银一、引言 钩子&#xff1a; “昨夜&#xff0c;某科技巨头财报中出现一个词&#xff1a;‘利润率承压’。瞬间&#xff0c;全球交易员屏幕飘红&#xff0c;万亿市值灰飞烟灭。而在另一个角落&#xff0…

国产麒麟系统卡启动项或图标如何解决

在使用国产麒麟系统的过程中&#xff0c;遇到开机卡启动项或者卡麒麟图标&#xff0c;如何解决&#xff1f;卡启动项和卡麒麟图标就如下图中的状态一样&#xff1b;那么如何解决呢&#xff1f;下面直接上干货&#xff0c;之前使用过的一个方法&#xff0c;分图解的形式来告诉你…

CAD(Creo)各模块的操作和配置

Creo各模块操作与配置详解1. Creo Parametric&#xff08;核心建模模块&#xff09;功能与操作草图设计&#xff1a;支持直线、圆弧、样条曲线等基本图元绘制&#xff0c;结合几何约束&#xff08;水平、垂直、相切等&#xff09;和尺寸标注&#xff08;线性、半径、角度等&…

速学!AI应用架构师分享金融市场AI监控系统的实时监控技术优化

速学!AI应用架构师分享金融市场AI监控系统的实时监控技术优化 关键词:金融市场监控、实时数据处理、AI异常检测、流处理架构、低延迟优化、机器学习模型、分布式系统 摘要:金融市场瞬息万变,每分钟甚至每毫秒的波动都可能带来巨大风险或机遇。传统监控系统常因响应迟缓、误…

RAR 、 ZIP、7z 之间的联系与区别

RAR 、 ZIP、7z之间的联系与区别RAR、ZIP 和 7z 是三种最主流的压缩文件格式&#xff0c;它们各有侧重和优缺点。下面我将从多个维度进行详细对比和介绍。 核心总结&#xff08;一目了然&#xff09; ZIP&#xff1a;通用性之王。历史最久、兼容性最广&#xff0c;是“默认选择…

主动学习在AI Agent训练中的应用

主动学习在AI Agent训练中的应用关键词&#xff1a;主动学习、AI Agent训练、机器学习、不确定性采样、查询合成摘要&#xff1a;本文深入探讨了主动学习在AI Agent训练中的应用。首先介绍了主动学习和AI Agent的背景知识&#xff0c;明确文章目的、预期读者和文档结构。接着阐…