news 2026/4/15 15:29:09

线段树二分

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
线段树二分

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;
}
};

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 17:24:38

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

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

作者头像 李华
网站建设 2026/4/8 20:14:00

基于微信小程序的图书阅读系统【源码+文档+调试】

&#x1f525;&#x1f525;作者&#xff1a; 米罗老师 &#x1f525;&#x1f525;个人简介&#xff1a;混迹java圈十余年&#xff0c;精通Java、小程序、数据库等。 &#x1f525;&#x1f525;各类成品Java毕设 。javaweb&#xff0c;ssm&#xff0c;springboot等项目&#…

作者头像 李华
网站建设 2026/4/15 14:52:12

DOL-CHS-MODS中文美化包:从零开始打造完美游戏体验

DOL-CHS-MODS中文美化包&#xff1a;从零开始打造完美游戏体验 【免费下载链接】DOL-CHS-MODS Degrees of Lewdity 整合 项目地址: https://gitcode.com/gh_mirrors/do/DOL-CHS-MODS 还在为Degrees of Lewdity的英文界面而烦恼吗&#xff1f;DOL-CHS-MODS整合包将彻底解…

作者头像 李华
网站建设 2026/4/11 21:24:18

小米运动智能刷步神器:轻松同步微信支付宝步数全攻略

小米运动智能刷步神器&#xff1a;轻松同步微信支付宝步数全攻略 【免费下载链接】mimotion 小米运动刷步数&#xff08;微信支付宝&#xff09;支持邮箱登录 项目地址: https://gitcode.com/gh_mirrors/mimo/mimotion 还在为每天运动步数太少而发愁吗&#xff1f;想不想…

作者头像 李华