[USACO 09FEB]Fair Shuttle
Description
逛逛集市,兑兑奖品,看看节目对农夫约翰来说不算什么,可是他的奶牛们非常缺乏锻炼——如果要逛完一整天的集市,他们一定会筋疲力尽的。所以为了让 奶牛们也能愉快地逛集市,约翰准备让奶牛们在集市上以车代步。但是,约翰木有钱,他租来的班车只能在集市上沿直线跑一次,而且只能停靠N(1 ≤N≤20000)个地点(所有地点都以1到N之间的一个数字来表示)。现在奶牛们分成K(1≤K≤50000)个小组,第i 组有Mi(1 ≤Mi≤N)头奶牛,他们希望从Si跑到Ti(1 ≤Si<Ti≤N)。
由于班车容量有限,可能载不下所有想乘车的奶牛们,此时也允许小里的一部分奶牛分开乘坐班车。约翰经过调查得知班车的容量是C(1≤C≤100),请你帮助约翰计划一个尽可能满足更多奶牛愿望的方案。
Input
第一行:包括三个整数:K,N和C,彼此用空格隔开。
第二行到K+1行:在第i+1行,将会告诉你第i组奶牛的信息:Si,Ei和Mi,彼此用空格隔开。
Output
第一行:可以坐班车的奶牛的最大头数。
Sample Input
8 15 3
1 5 2
13 14 1
5 8 3
8 14 2
14 15 1
9 12 1
12 15 2
4 6 1
Sample Output
10
Hint
班车可以把2头奶牛从1送到5,3头奶牛从5送到8,2头奶牛从8送到14,1头奶牛从9送到12,1头奶牛从13送到14,1头奶牛从14送到15。
题解
注意到可以不全部上车,那么贪心的思路就比较明确了。尽量让下车下得早的多上车,这样利益可以最大化。
我们按区间右端点排序。第$i$个区间$[Li,Ri]$显然我们要找到这个区间范围内已经累加的最大值,最大值可以用线段树维护,这里给出这种版本。
#include<map>
#include<set>
#include<cmath>
#include<ctime>
#include<queue>
#include<stack>
#include<cstdio>
#include<string>
#include<vector>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define LL long long
#define RE register
#define IL inline
#define Lr (root<<1)
#define Rr (root<<1|1)
using namespace std;
const LL N=; LL k,n,c;
struct tt
{
LL l,r,c;
}a[N+]; LL smg[N*+],maxn[N*+];
LL Query(LL root,LL l,LL r,LL a,LL b);
void Add(LL root,LL l,LL r,LL a,LL b,LL key);
IL void Pushdown(LL root); bool comp(const tt &a,const tt &b){return a.r<b.r;}
IL LL Min(LL a,LL b){return a<b ? a:b;}
IL LL Max(LL a,LL b){return a>b ? a:b;} int main()
{
scanf("%lld%lld%lld",&k,&n,&c);
for (RE LL i=;i<=k;i++)
{
scanf("%lld%lld%lld",&a[i].l,&a[i].r,&a[i].c);
a[i].r--;
}
sort(a+,a+k+,comp);
LL tmp,ans=;
for (RE LL i=;i<=k;i++)
{
tmp=Query(,,n,a[i].l,a[i].r);
if (tmp==c) continue;
ans+=Min(c-tmp,a[i].c);
Add(,,n,a[i].l,a[i].r,Min(c-tmp,a[i].c));
}
printf("%lld\n",ans);
return ;
} LL Query(LL root,LL l,LL r,LL a,LL b)
{
if (a<=l&&r<=b) return maxn[root];
Pushdown(root);
LL mid=(l+r)>>;
LL ans=;
if (mid>=a) ans=Query(Lr,l,mid,a,b);
if (mid<b) ans=Max(ans,Query(Rr,mid+,r,a,b));
return ans;
}
void Add(LL root,LL l,LL r,LL a,LL b,LL key)
{
if (a<=l&&r<=b)
{
smg[root]+=key;
maxn[root]+=key;
return;
}
Pushdown(root);
LL mid=(l+r)>>;
if (mid>=a) Add(Lr,l,mid,a,b,key);
if (mid<b) Add(Rr,mid+,r,a,b,key);
maxn[root]=Max(maxn[Lr],maxn[Rr]);
}
IL void Pushdown(LL root)
{
smg[Lr]+=smg[root];maxn[Lr]+=smg[root];
smg[Rr]+=smg[root];maxn[Rr]+=smg[root];
smg[root]=;
}
[USACO 09FEB]Fair Shuttle的更多相关文章
- [JLOI 2011]飞行路线&[USACO 09FEB]Revamping Trails
Description Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公司一共在n个城市设有业务,设这些城市分别标记为0到n-1,一共有m种航线,每种航线连接两个城市,并 ...
- 洛谷 P1607 [USACO09FEB]庙会班车Fair Shuttle 解题报告
P1607 [USACO09FEB]庙会班车Fair Shuttle 题目描述 Although Farmer John has no problems walking around the fair ...
- 洛谷P1607 [USACO09FEB]庙会班车Fair Shuttle
P1607 [USACO09FEB]庙会班车Fair Shuttle 题目描述 Although Farmer John has no problems walking around the fair ...
- BZOJ1577 USACO 2009 Feb Gold 1.Fair Shuttle Solution
权限题,不给传送门啦!在学校OJ上交的.. 有些不开心,又是一道贪心,又是一个高级数据结构的模板,又是看了别人的题解还写崩了QAQ,蒟蒻不需要理由呀. 正经题解: 首先,我们可以由「显然成立法」得出, ...
- [USACO 2009 Feb Gold] Fair Shuttle (贪心+优先队列)
题目大意:有N个站点的轻轨站,有一个容量为C的列车起点在1号站点,终点在N号站点,有K组牛群,每组数量为Mi(1≤Mi≤N),行程起点和终点分别为Si和Ei(1≤Si<Ei≤N).计算最多有多少 ...
- 【贪心】洛谷P1607 [USACO09FEB]庙会班车Fair Shuttle 题解
不是很容易写出正解的贪心问题. 题目描述 Although Farmer John has no problems walking around the fair to collect pri ...
- P1607 [USACO09FEB]庙会班车Fair Shuttle
题目描述 Although Farmer John has no problems walking around the fair to collect prizes or see the shows ...
- [USACO09FEB]庙会班车Fair Shuttle 线段树维护maxx&&贪心
题目描述 Although Farmer John has no problems walking around the fair to collect prizes or see the shows ...
- 【USACO09FEB】 庙会班车 Fair Shuttle 贪心+线段树
Although Farmer John has no problems walking around the fair to collect prizes or see the shows, his ...
随机推荐
- ORACLE 11G R2 RAC classical install OGG12.1(LINUX) 经典抽取模式单项同步配置OGG12.1
博文结构图如下: 一.环境描述以及注意事项 1.1 环境简介 IP 系统 Oracle版本 OGG版本 源端 172.16.10.16/36 RHEL6.5 oracle11204 12.1 目标端 ...
- 结对作业NO.2
结对NO.2 1. 引言 1.1 项目地址 github 生成的一组好数据 1.2 项目简介 按照老师给的项目要求:"编码实现一个部门与学生的智能匹配的程序".由于数据需要自己生成 ...
- 201621123062《java程序设计》第二周学习总结
1.本周学习总结 本周学习重点: 1.java的基本数据类型(类似于C,特有boolean),java的引用类型(类似指针),其他常用类. 2.字符串类型String(比c简单),String的不变性 ...
- STL常用整理
S T L Sting: << 判断拼音序 size length 字符串长度 str[n] 代表字符串中的一个字符 可用作左值 string::size_type 用于表示字符串长度计量 ...
- segmentedControl设置字体和字体颜色问题
NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:[UIColor blackColor],UITextAttributeT ...
- hdu 3642 Get The Treasury
Get The Treasury http://acm.hdu.edu.cn/showproblem.php?pid=3642 Time Limit: 10000/5000 MS (Java/Othe ...
- MySQL InnoDB锁机制
概述: 锁机制在程序中是最常用的机制之一,当一个程序需要多线程并行访问同一资源时,为了避免一致性问题,通常采用锁机制来处理.在数据库的操作中也有相同的问题,当两个线程同时对一条数据进行操作,为了保证数 ...
- OO第一次作业总结
OO第一次学习总结 1.第一次作业:多项式加法 从未接触过java的我,在从输入输出开始学了几天后,按照C语言的思路,写出了一个与面向过程极其接近的程序. 在这个程序中,存在两个类:一个是Comput ...
- Python内置函数(9)——int
英文文档: class int(x=0) class int(x, base=10) Return an integer object constructed from a number or str ...
- iot:下一步要做的工作
1.DeviceMessage抽象(定义&支持扩展)2.createDeviceMessage.analyseDeviceMessage(支持扩展)3.日志打印4.错误处理5.断线重连6.交互 ...