BZOJ1577: [Usaco2009 Feb]庙会捷运Fair Shuttle 贪心+线段树
1577: [Usaco2009 Feb]庙会捷运Fair Shuttle
Description
公交车一共经过N(1<=N<=20000)个站点,从站点1一直驶到站点N。K(1<=K<=50000)群奶牛希望搭乘这辆公交车。第i群牛一共有Mi(1<=Mi<=N)只.
他们希望从Si到Ei去。
公交车只能座C(1<=C<=100)只奶牛。而且不走重复路线,请计算这辆车最多能满足多少奶牛听要求。
注意:对于每一群奶牛,可以部分满足,也可以全部满足,也可以全部不满足。
Input
第1行: 三个整数: K,N,C。 由空格隔开。
第2..K+1行:第i+1行,告诉你第i组奶牛的信息: S_i, E_i and M_i。由空格隔开。
Output
一行:可以在庙会乘坐捷运的牛的最大头数
Sample Input
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
HINT
捷运可以把2头奶牛从展台1送到展台5,3头奶牛从展台5到展台8, 2头奶牛从展台8 到展台14,1头奶牛从展台9送到展台12,一头奶牛从展台13送到展台14, 一头奶牛从 14送到15。
题解:
先贪心:
把询问按照右端点的大小递增排序,然后右端点相同时,左端点较大的在前
然后上线段树:
对于每一个区间,查询最小值,在最小值和该团队的牛的数量取一个min,之后把区间减去min,也就是上尽可能多的牛
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int N=100005;
struct pp {int l,r,w;} Q[N];
struct Tree{int l,r,mn,lazy;}T[N*4];
int n,l,c,ans;
bool cmp(pp u,pp v)
{if(u.r!=v.r) return u.r<v.r;return u.l>v.l;
}
void pushup(int x)
{T[x].mn=min(T[x<<1].mn,T[x<<1|1].mn);
}
void build(int x,int l,int r)
{T[x].l=l,T[x].r=r;T[x].mn=c;if(l==r) return;int mid=(T[x].l+T[x].r)>>1;build(x<<1,l,mid);build(x<<1|1,mid+1,r);pushup(x);
}
void pushdown(int x)
{int lc=x<<1,rc=x<<1|1;T[lc].mn+=T[x].lazy;T[rc].mn+=T[x].lazy;T[lc].lazy+=T[x].lazy;T[rc].lazy+=T[x].lazy;T[x].lazy=0;
}
int Query(int x,int l,int r)
{if(T[x].l==l&&T[x].r==r) return T[x].mn;if(T[x].lazy) pushdown(x);int mid=(T[x].l+T[x].r)>>1;if(r<=mid) return Query(x<<1,l,r);else if(l>mid) return Query(x<<1|1,l,r);else return min(Query(x<<1,l,mid),Query(x<<1|1,mid+1,r));
}
void Modify(int x,int l,int r,int v)
{if(T[x].l==l&&T[x].r==r){T[x].mn+=v;T[x].lazy+=v;return;}if(T[x].lazy) pushdown(x);int mid=(T[x].l+T[x].r)>>1;if(r<=mid) Modify(x<<1,l,r,v);else if(l>mid) Modify(x<<1|1,l,r,v);else Modify(x<<1,l,mid,v),Modify(x<<1|1,mid+1,r,v);pushup(x);
}
int main()
{scanf("%d%d%d",&n,&l,&c);for(int i=1;i<=n;i++){scanf("%d%d%d",&Q[i].l,&Q[i].r,&Q[i].w);Q[i].r--;}sort(Q+1,Q+n+1,cmp);build(1,1,l);for(int i=1;i<=n;i++){int x=Q[i].l,y=Q[i].r;int tmp=min(Q[i].w,Query(1,x,y));if(tmp){ans+=tmp;Modify(1,x,y,-tmp);}}printf("%d",ans);
}
BZOJ1577: [Usaco2009 Feb]庙会捷运Fair Shuttle 贪心+线段树相关推荐
- bzoj1577 [Usaco2009 Feb]庙会捷运Fair Shuttle
Description 公交车一共经过N(1<=N<=20000)个站点,从站点1一直驶到站点N.K(1<=K<=50000)群奶牛希望搭乘这辆公交车.第i群牛一共有Mi(1& ...
- BZOJ1577: [Usaco2009 Feb]庙会捷运Fair Shuttle
n<=20000个车站,车能同时载C<=100个人,求能满足K<=50000群人的多少个.每群人给起点终点和人数,一群人不一定要都满足. 一开始想DP,想不出,很菜. 贪心即可.如果 ...
- [Usaco2009 Feb]庙会捷运Fair Shuttle
Description 公交车一共经过N(1<=N<=20000)个站点,从站点1一直驶到站点N.K(1<=K<=50000)群奶牛希望搭乘这辆公交车.第i群牛一共有Mi(1& ...
- USACO09FEB庙会捷运Fair Shuttleの思路
一个没有被我成功证明的 贪心 但是 ac了的 别人排序都是排终点.但我的排终点错了emm排起点才对qvq 有没有人友情看看怎么证(没有 #include<cstdio> #include& ...
- 【Luogu】P1607庙会班车Fair Shuttle(线段树+贪心)
我不会做贪心题啊--贪心题啊--题啊--啊-- 我真TM菜爆了啊-- 这题就像凌乱的yyy一样,把终点排序,终点相同的按起点排序.然后维护一个查询最大值的线段树.对于一个区间[l,r],如果这个区间已 ...
- jzoj1295,P1607-轻轨(庙会班车)【贪心,线段树】
前言 我考试时敲了一个不仅比正解编程复杂度高,而且时间更慢,还AC不了的费用流 垃圾代码 #include<cstdio> #include<cstring> #include ...
- P1607 [USACO09FEB]Fair Shuttle G
P1607 [USACO09FEB]Fair Shuttle G 题意 现在又n头牛,分成了k组,每一组有三个值,s.e.m,分别表示,这一组牛从s到e,并且这一组里面有m头牛,现在有一辆车,一次只能 ...
- [USACO09FEB]庙会班车Fair Shuttle 线段树维护maxx贪心
[USACO09FEB]庙会班车Fair Shuttle 线段树维护maxx&&贪心 题目描述 Although Farmer John has no problems walking ...
- 1578: [Usaco2009 Feb]Stock Market 股票市场
1578: [Usaco2009 Feb]Stock Market 股票市场 Time Limit: 10 Sec Memory Limit: 64 MB Submit: 414 Solved: ...
- bzoj 3398: [Usaco2009 Feb]Bullcow 牡牛和牝牛(DP)
3398: [Usaco2009 Feb]Bullcow 牡牛和牝牛 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 353 Solved: 248 ...
最新文章
- 干货 | 一文总结机器学习类面试问题与思路
- C#面向对象设计模式纵横谈
- lnmp一键包的thinkphp5 nginx配置分享
- 如何在 SAP Fiori Elements List Report 表格工具栏里增添新的自定义按钮
- C++基础学习8:类的定义(class)
- 北京理工大学计算机学院研究生培养方案,北京理工大学2018版学术型研究生培养方案.PDF...
- Linux查看内存,负载状态
- java 四大元注解_java中元注解有四个
- 图像识别用python还是matlab_用于图像识别的五大最佳编程语言!
- 频谱分析中的频谱泄露现象(以ADC性能测试场景为例)
- win10 戴尔电脑 禁用触摸板
- BZOJ 2827 千山鸟飞绝 Treap
- C语言结构体字节对齐规则
- 【读书笔记】《云计算关键领域安全指南V4.0》(一)
- 搭建个人内网穿透服务
- Tomcat启动报错org.apache.catalina.core.StandardContext.startInternal One or more listeners failed to sta
- 2020 必须收藏的vscode主题【清爽的前端配置 vue】
- 7-3 表达式求值_1 (20分) 简单代码
- 数据结构之:时间复杂度(T(n)=O(n))
- 网页视频流媒体服务器在雪亮工程中的应用
热门文章
- linaro交叉编译工具安装配置
- Redis介绍 AND SpringBoot集成Redis
- 个人网站怎么申请支付接口?
- [机缘参悟-74]:沟通技巧-无论在职场还是在家,尽量少用反问句
- ASP.Net Core Web Api在Windows服务器上部署
- html解压zip文件怎么打开方式,zip文件是什么文件,如何打开zip格式的文件?
- 领取敬业福或新春红包
- vant-uploader上传照片无法删除
- Python turtle库如何瞬间完成作图?难道只难像海龟一样慢慢爬吗?
- 广东省计算机一级网络题分值,计算机一级考试的试题分值如何分配的?