1577: [Usaco2009 Feb]庙会捷运Fair Shuttle

Time Limit: 10 Sec  Memory Limit: 64 MB
Submit: 310  Solved: 171
[Submit][Status][Discuss]

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

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,一头奶牛从展台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 贪心+线段树相关推荐

  1. bzoj1577 [Usaco2009 Feb]庙会捷运Fair Shuttle

    Description 公交车一共经过N(1<=N<=20000)个站点,从站点1一直驶到站点N.K(1<=K<=50000)群奶牛希望搭乘这辆公交车.第i群牛一共有Mi(1& ...

  2. BZOJ1577: [Usaco2009 Feb]庙会捷运Fair Shuttle

    n<=20000个车站,车能同时载C<=100个人,求能满足K<=50000群人的多少个.每群人给起点终点和人数,一群人不一定要都满足. 一开始想DP,想不出,很菜. 贪心即可.如果 ...

  3. [Usaco2009 Feb]庙会捷运Fair Shuttle

    Description 公交车一共经过N(1<=N<=20000)个站点,从站点1一直驶到站点N.K(1<=K<=50000)群奶牛希望搭乘这辆公交车.第i群牛一共有Mi(1& ...

  4. USACO09FEB庙会捷运Fair Shuttleの思路

    一个没有被我成功证明的 贪心 但是 ac了的 别人排序都是排终点.但我的排终点错了emm排起点才对qvq 有没有人友情看看怎么证(没有 #include<cstdio> #include& ...

  5. 【Luogu】P1607庙会班车Fair Shuttle(线段树+贪心)

    我不会做贪心题啊--贪心题啊--题啊--啊-- 我真TM菜爆了啊-- 这题就像凌乱的yyy一样,把终点排序,终点相同的按起点排序.然后维护一个查询最大值的线段树.对于一个区间[l,r],如果这个区间已 ...

  6. jzoj1295,P1607-轻轨(庙会班车)【贪心,线段树】

    前言 我考试时敲了一个不仅比正解编程复杂度高,而且时间更慢,还AC不了的费用流 垃圾代码 #include<cstdio> #include<cstring> #include ...

  7. P1607 [USACO09FEB]Fair Shuttle G

    P1607 [USACO09FEB]Fair Shuttle G 题意 现在又n头牛,分成了k组,每一组有三个值,s.e.m,分别表示,这一组牛从s到e,并且这一组里面有m头牛,现在有一辆车,一次只能 ...

  8. [USACO09FEB]庙会班车Fair Shuttle 线段树维护maxx贪心

    [USACO09FEB]庙会班车Fair Shuttle 线段树维护maxx&&贪心 题目描述 Although Farmer John has no problems walking ...

  9. 1578: [Usaco2009 Feb]Stock Market 股票市场

    1578: [Usaco2009 Feb]Stock Market 股票市场 Time Limit: 10 Sec  Memory Limit: 64 MB Submit: 414  Solved:  ...

  10. bzoj 3398: [Usaco2009 Feb]Bullcow 牡牛和牝牛(DP)

    3398: [Usaco2009 Feb]Bullcow 牡牛和牝牛 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 353  Solved: 248 ...

最新文章

  1. 干货 | 一文总结机器学习类面试问题与思路
  2. C#面向对象设计模式纵横谈
  3. lnmp一键包的thinkphp5 nginx配置分享
  4. 如何在 SAP Fiori Elements List Report 表格工具栏里增添新的自定义按钮
  5. C++基础学习8:类的定义(class)
  6. 北京理工大学计算机学院研究生培养方案,北京理工大学2018版学术型研究生培养方案.PDF...
  7. Linux查看内存,负载状态
  8. java 四大元注解_java中元注解有四个
  9. 图像识别用python还是matlab_用于图像识别的五大最佳编程语言!
  10. 频谱分析中的频谱泄露现象(以ADC性能测试场景为例)
  11. win10 戴尔电脑 禁用触摸板
  12. BZOJ 2827 千山鸟飞绝 Treap
  13. C语言结构体字节对齐规则
  14. 【读书笔记】《云计算关键领域安全指南V4.0》(一)
  15. 搭建个人内网穿透服务
  16. Tomcat启动报错org.apache.catalina.core.StandardContext.startInternal One or more listeners failed to sta
  17. 2020 必须收藏的vscode主题【清爽的前端配置 vue】
  18. 7-3 表达式求值_1 (20分) 简单代码
  19. 数据结构之:时间复杂度(T(n)=O(n))
  20. 网页视频流媒体服务器在雪亮工程中的应用

热门文章

  1. linaro交叉编译工具安装配置
  2. Redis介绍 AND SpringBoot集成Redis
  3. 个人网站怎么申请支付接口?
  4. [机缘参悟-74]:沟通技巧-无论在职场还是在家,尽量少用反问句
  5. ASP.Net Core Web Api在Windows服务器上部署
  6. html解压zip文件怎么打开方式,zip文件是什么文件,如何打开zip格式的文件?
  7. 领取敬业福或新春红包
  8. vant-uploader上传照片无法删除
  9. Python turtle库如何瞬间完成作图?难道只难像海龟一样慢慢爬吗?
  10. 广东省计算机一级网络题分值,计算机一级考试的试题分值如何分配的?