escription

公交车一共经过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

一行:可以在庙会乘坐捷运的牛的最大头数

题解:

只要运输总数最大化就好, 送哪一个牛都是相同的.
优先考虑右端点小的运输段, 右端点相同则以左端点大的优先.
中间过程用线段树模拟一下即可.
这样做为什么是正确的呢 ? 
 
这时依据排序结果可能会导致因为前面的坐满了而后面的上不来的情况. 
 
上一个右端点一定小于等于当前右端点,那么考虑从上一次运输中撤下 $v$ 头牛,加到当前运输中.
 
当前运输结束的右端点不小于上一个,那么对后面的影响肯定大于之前的那个. 
 
于是,我们就认为如果有右端点更小的,一定要以右端点小的优先. 
 
右端点相同时左端点大的先上车,这样左端点更大在车上时间更少,对之前的影响也更小. 

Code:

#include<bits/stdc++.h>
#define setIO(s) freopen(s".in","r",stdin)
#define maxn 10000000
#define ls (x<<1)
#define rs ((x<<1)|1)
#define mid ((l+r)>>1)
using namespace std;
struct Q
{
int l,r,num;
bool operator<(Q e)const
{
return r==e.r?l>e.l:r<e.r;
}
}q[maxn];
int k,n,c;
int maxv[maxn],lazy[maxn];
void pushup(int x)
{
maxv[x]=max(maxv[ls],maxv[rs]);
}
void mark(int x,int delta)
{
lazy[x]+=delta,maxv[x]+=delta;
}
void pushdown(int l,int r,int x)
{
if(lazy[x])
{
if(mid>=l) mark(ls, lazy[x]);
if(mid+1<=r)mark(rs, lazy[x]);
lazy[x]=0;
}
}
int query(int l,int r,int x,int L,int R)
{
if(l>=L&&r<=R) return maxv[x];
pushdown(l,r,x);
int t=0;
if(L<=mid) t = query(l,mid,ls,L,R);
if(R>mid) t = max(t,query(mid+1,r,rs,L,R));
return t;
}
void update(int l,int r,int x,int L,int R,int delta)
{
pushdown(l,r,x);
if(l>=L&&r<=R)
{
mark(x, delta);
return;
}
if(L<=mid) update(l,mid,ls,L,R,delta);
if(R>mid) update(mid+1,r,rs,L,R,delta);
pushup(x);
}
int main()
{
//setIO("input");
scanf("%d%d%d",&k,&n,&c);
for(int i=1;i<=k;++i) scanf("%d%d%d",&q[i].l,&q[i].r,&q[i].num);
sort(q+1,q+1+k);
int ans=0;
for(int i=1;i<=k;++i)
{
int tmp=query(1,n,1,q[i].l,q[i].r-1);
ans+=min(q[i].num, c - tmp);
update(1,n,1,q[i].l,q[i].r-1,min(q[i].num,c - tmp));
}
printf("%d\n",ans);
return 0;
}

  

BZOJ 1577: [Usaco2009 Feb]庙会捷运Fair Shuttle 线段树 + 贪心的更多相关文章

  1. bzoj 1577: [Usaco2009 Feb]庙会捷运Fair Shuttle——小根堆+大根堆+贪心

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

  2. bzoj 1577: [Usaco2009 Feb]庙会捷运Fair Shuttle【贪心+线段树】

    按结束时间排序,然后开个线段树,按照排序后的牛群贪心的选 贪心的依据是选哪头牛都是选,不如给后面的多省一点空间 #include<iostream> #include<cstdio& ...

  3. 【BZOJ】1577: [Usaco2009 Feb]庙会捷运Fair Shuttle

    [题意]公车从1开到n,有k群牛想从一个点到达另一个点,公车最多乘坐c个人,牛群可以拆散,问最多载多少牛到达目的地. [算法]贪心+堆 [题解]线段和点的贪心,一般有按左端点排序和按右端点排序两种方法 ...

  4. 【贪心】bzoj1577: [Usaco2009 Feb]庙会捷运Fair Shuttle

    一类经典的线段贪心 Description 公交车一共经过N(1<=N<=20000)个站点,从站点1一直驶到站点N.K(1<=K<=50000)群奶牛希望搭乘这辆公交车.第i ...

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

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

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

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1577 [题解] 我们把每坨奶牛按s排个序. 对于每坨奶牛,如果车上有空位置就塞. 否则,看下 ...

  7. [bzoj1577][Usaco2009 Feb]庙会捷运Fair Shuttle_贪心_线段树

    庙会捷运 Fair Shuttle bzoj-1577 Usaco-2009 Feb 题目大意:有一辆公交车从1走到n.有m群奶牛从$S_i$到$E_i$,第i群奶牛有$W_i$只.车有一个容量c.问 ...

  8. <USACO09FEB>庙会捷运Fair Shuttleの思路

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

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

    题目描述 Although Farmer John has no problems walking around the fair to collect prizes or see the shows ...

随机推荐

  1. What you can talk

    data buffer who locked the account hash join cost memory and nested loop do not. How to make it hash ...

  2. JS 缓冲运动 带运动的留言本 小案例

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...

  3. HDU 3167 KMP

    很久之前做的一题,忽然想起来,依然觉得思路巧妙. //这道题,确实是一道好题.但如何应用KMP,确实大大超出了意料中. //这道题匹配的是某元素在子串中的名次,也就是在子串中排第几小.我想了整整一天, ...

  4. 正则表达式,字符串中需要两个反斜杠“\\d”

    这个正则表达式为什么会有两个反斜杠? "^.*?\\.(jpg|png|bmp|gif)$"上面这个正则表达式为什么有两个反斜杠呢?反斜杠点\.就能表示点.了,为什么还要在\.前面 ...

  5. Android开发趣事记之周期性广告

    前些天做了一个应用,由于怕影响用户体验,所以我将广告设定了一下,就是每启动软件8次.就会弹出一次广告. 在上传到应用宝后.竟然得到了这种结果: 看到了吧.无病毒,无广告. 看来审核人员是不会把应用连续 ...

  6. java的死锁学习

    学习java的死锁写的代码 也是看书上的然后自己敲了一个 <span style="font-size:18px;">package synchronization.j ...

  7. 卸载了 TortoiseGit,问题太多

    电脑里面同一时候安装TortoiseGit 和 TortoiseSVN,使用tortoiseGIT来跟踪git项目,有一个非常无语的问题,git status显示都是clean的.可是目录图标却始终显 ...

  8. DirectFB学习之移植到nuc972平台 标签: DirectFBlinux图形加速驱动【转】

    本文转载自:http://blog.csdn.net/jxgz_leo/article/details/70137304 [nuc972开发板购买地址,感谢支持](https://shop102749 ...

  9. curses-键盘编码-openssl加解密【转】

    本文转载自;https://zhuanlan.zhihu.com/p/26164115 1.1 键盘编码 按键过程:当用户按下某个键时, 1.键盘会检测到这个动作,并通过键盘控制器把扫描码(scan ...

  10. 曼哈顿距离 C++

    template <class T1, class T2>double ManhattanDistance(std::vector<T1> &inst1, std::v ...