P1607 [USACO09FEB]Fair Shuttle G

news/2025/1/12 3:06:43/

P1607 [USACO09FEB]Fair Shuttle G

题意

现在又n头牛,分成了k组,每一组有三个值,s、e、m,分别表示,这一组牛从s到e,并且这一组里面有m头牛,现在有一辆车,一次只能装c头牛,并且是从1号位置开到n号位置,单向开,现在问你最多有多少头牛能够乘坐车从它的起始位置到它的终点位置。

思路

贪心+线段树
贪心:将奶牛的起终点按照终点从小到大排序,如果终点相同,将起点按照从小到大排序。
线段树:求某段区间内最多能载多少头奶牛。
假设当前的车上的牛已经满了,如果我们将之前的牛提出,那么就不能将它们送到终点,这样得到的结果肯定会小,那么,如果当前的要上车的奶牛要上车,但是它的目的地非常远,那么对后面的目的地比当前牛的目的地更近的牛是非常不利的,所以我们要按照这样的规则排序。

#include <bits/stdc++.h>#define int long long
#define x first
#define y secondusing namespace std;const int N = 2e5 + 10;
typedef pair<int, int> PII;int n, k, c;struct Edge
{int s, e, m;bool operator < (const Edge &t) const{if (e == t.e) return s < t.s;return e < t.e;}
}cow[N << 1];struct node
{int l, r;int maxx;int tag;
}tr[N << 2];void pushup(int u) { tr[u].maxx = max(tr[u << 1].maxx, tr[u << 1 | 1].maxx); }void pushdown(int u)
{if (tr[u].tag){tr[u << 1].maxx += tr[u].tag;tr[u << 1].tag += tr[u].tag;tr[u << 1 | 1].maxx += tr[u].tag;tr[u << 1 | 1].tag += tr[u].tag;tr[u].tag = 0;}
}void build(int u, int l, int r)
{tr[u] = {l, r, 0, 0};if (l == r) return ;int mid = l + r >> 1;build(u << 1, l, mid), build(u << 1 | 1, mid + 1, r);pushup(u);
}void modify(int u, int l, int r, int k)
{if (l <= tr[u].l && r >= tr[u].r){tr[u].tag += k;tr[u].maxx += k;return ;}pushdown(u);int mid = tr[u].l + tr[u].r >> 1;if (l <= mid) modify(u << 1, l, r, k);if (r > mid) modify(u << 1 | 1, l, r, k);pushup(u);
}int query(int u, int l, int r)
{if (l <= tr[u].l && r >= tr[u].r) return tr[u].maxx;pushdown(u);int mid = tr[u].l + tr[u].r >> 1;int ans = 0;if (l <= mid) ans = query(u << 1, l, r);if (r > mid) ans = max(ans, query(u << 1 | 1, l, r));return ans;
}void solve()
{cin >> k >> n >> c;for (int i = 1; i <= k; i ++){cin >> cow[i].s >> cow[i].e >> cow[i].m;cow[i].e --;}build(1, 1, n);sort(cow + 1, cow + 1 + k);int ans = 0;for (int i = 1; i <= k; i ++){int tmp = query(1, cow[i].s, cow[i].e);if (tmp < c){int t = min(c - tmp, cow[i].m);ans += t;modify(1, cow[i].s, cow[i].e, t);}}cout << ans << endl;
}signed main()
{std::ios::sync_with_stdio(false);solve();return 0;
}

http://www.ppmy.cn/news/869723.html

相关文章

Codeforces Gym 101521A Shuttle Bus

题意&#xff1a;给定一个2*N的方格&#xff0c;从左上角开始走&#xff0c;有些格子不能走&#xff0c;问能否一次遍历所有能走的方格 再加上&#xff08;2&#xff0c;2&#xff09;点不能走&#xff0c;这几种情况&#xff1b; 应该差不多了&#xff0c; 主要是 找奇偶关系…

Shuttle Puzzle[USACO]

开始试图找挪动的规律&#xff0c;找了半天&#xff0c;成功的挪动规律虽然没找到&#xff0c;但发现了失败的规律。如果出现两个连续的W或B&#xff0c;而它的连续没能连续到边界&#xff0c;则铁定失败。如&#xff1a;...W..BB..W.. 或者 ..B..WW..B.. 于是&#xff0c;可以…

初步了解Shuttle ESB

ESB&#xff1a;EnterpriseService Bus&#xff0c;即企业服务总线。它是传统中间件技术与XML、Web服务等技术结合的产物&#xff1b;从面向服务体系架构发展而来。 ESB採用了“总线”这种模式来管理和简化应用之间的集成拓扑结构&#xff0c;以广为接受的开放标准为基础来支持…

Shuttle ESB介绍

背景介绍 背景一 项目中使用到消息中间件。之前是采用另一位同事的思路实现&#xff1a;主要通过OPC通道&#xff0c;检测前端的消息。一旦发现有新消息&#xff0c;马上发送到各个终端&#xff0c;终端再根据自己的业务需要进行各自的显示以及处理。不过这样实现&#xff0…

A Singing Shuttle

A Singing Shuttle project presentation the video shows how it works how it work laser cut part we use the software “Lasermaker” 1. practice first we can print some templates provided. then we can try to create our own pattern another practice: …

上天入地Shuttle多穿再升级!

导语 大家好&#xff0c;我是智能仓储物流技术研习社的社长&#xff0c;你的老朋友&#xff0c;老K。 新书上市《智能物流系统构成与技术实践》 知名企业 更多推荐 如何将AGV&#xff0c;堆垛机&#xff0c;RGV连上5G&#xff1f; 最强盘点&#xff01;16种不同堆垛机让你一次看…

Shuttle安装以及配置简介

本文说明&#xff1a; 本文介绍Shuttle的安装以及配置&#xff0c;主要是根据Github上的官方文档进行翻译说明&#xff0c;还有自己的一些补充&#xff0c;如果习惯直接看文档的朋友&#xff0c;可以直接关掉这篇文章了~ 本文说明 Shuttle是什么Shuttle怎么用 安装ShuttleShutt…

Shuttle 学习

见 http://blog.csdn.net/liu765023051/article/details/38521039 转载于:https://www.cnblogs.com/lhxsoft/p/8535055.html