题目描述

LYK在玩一个游戏。

有k群小怪兽想乘坐公交车。第i群小怪兽想从xi出发乘坐公交车到yi。但公交车的容量只有M,而且这辆公交车只会从1号点行驶到n号点。

LYK想让小怪兽们尽可能的到达自己想去的地方。它想知道最多能满足多少小怪兽的要求。

当然一群小怪兽没必要一起上下车,它们是可以被分开来的。

输入输出格式

输入格式:

第一行三个数k,n,M。

接下来k行每行3个数xi,yi和ci。其中ci表示第i群小怪兽的小怪兽数量。

输出格式:

一个数表示最多有多少只小怪兽能满足要求。

输入输出样例

输入样例#1:

3 5 3
1 3 4
3 5 2
1 5 3
输出样例#1:

5

样例解释
第一群的3只小怪兽在1号点上车,并在3号点下车。
第二群的2只小怪兽在3号点上车,5号点下车。

说明

对于30%的数据小怪兽的总数不超过10只,n<=10。

对于另外30%的数据k,n<=1000。

对于100%的数据1<=n<=20000,1<=k<=50000,1<=M<=100,1<=ci<=100,1<=xi<yi<=n。

 /*luogu上做过的原题。USACO的庙会班车,做线段树的那段时间看过,一眼认出是原题,毕竟看过好几次。

 贪心+线段树

 类似于活动安排,先按右端点排个序,然后线段树维护区间最大值就好了。
为什么呢。
因为一段路上公交车中还能坐下的最大的人数为 容量-这段路上车内人数的最大值。
所以,用线段树维护区间最大值,在小怪物上车的时候查询坐车的这段区间的最大值,
然后用容量-得到的最大值,就是能上车的人数。
遵循能上多少是多少的原则,这样得出来肯定是最优解。
需要注意的是,updata的时候是更新到node[i].r-1,因为node[i].r的时候上车的那群小怪物已经下车了。
*/ #include<iostream>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 50005
#define lson (root<<1)
#define rson (root<<1|1)
#define _max(a,b) a=a>b?a:b
using namespace std; int k,n,m,x,y,ans,tmp,val;
int tree[N<<],mark[N<<];
struct Node
{
int l,r,peo;
bool operator <(const Node &a)const
{
if(a.r!=r)return r<a.r;
return l>a.l;
}
}node[N]; inline void read(int &num)
{
char c=getchar();
for(;!isdigit(c);c=getchar());
for(;isdigit(c);c=getchar()){num=num*+c-'';};
} void pushdown(int root)
{
if(!mark[root]) return;
int k=mark[root];
tree[lson]+=k;tree[rson]+=k;
mark[lson]+=k;mark[rson]+=k;
mark[root]=;
} int query(int root,int l,int r,int L,int R)
{
if(l>R||r<L) return ;
if(L<=l&&r<=R) return tree[root];
int mid=(l+r)>>;
pushdown(root);
int a=query(lson,l,mid,L,R),b=query(rson,mid+,r,L,R);
tree[root]=_max(tree[lson],tree[rson]);
return _max(a,b);
} void updata(int root,int l,int r,int L,int R,int to)
{
if(l>R||r<L) return;
if(L<=l&&r<=R)
{
mark[root]+=to;
tree[root]+=to;
return;
}
pushdown(root);
int mid=(l+r)>>;
updata(lson,l,mid,L,R,to);
updata(rson,mid+,r,L,R,to);
tree[root]=_max(tree[lson],tree[rson]);
} void init()
{
read(k),read(n),read(m);
for(int i=;i<=k;i++)
{
read(node[i].l),read(node[i].r),read(node[i].peo);
}
sort(node+,node+k+);
for(int i=;i<=k;i++)
{
tmp=query(,,n,node[i].l,node[i].r);
if(tmp>=m) continue; //最大值超过了容量,一个人也坐不下了
if(tmp+node[i].peo<=m) val=node[i].peo; //当前这群小怪物可以全部坐下
else val=m-tmp; //不能全坐下,能坐几个算几个
ans+=val;
updata(,,n,node[i].l,node[i].r-,val); //是到r-1,不是r!
}
printf("%d",ans);
} int main()
{
freopen("bus.in","r",stdin);
freopen("bus.out","w",stdout);
init();
fclose(stdin);
fclose(stdout);
return ;
}

2017.10.3 国庆清北 D3T2 公交车的更多相关文章

  1. 2017.10.1 国庆清北 D1T1 zhx的字符串题

    题目背景 2017国庆清北D1T1 题目描述 你是能看到第一题的 friends 呢. ——hja 何大爷对字符串十分有研究,于是天天出字符串题虐杀 zhx.何大爷今天为 字符串定义了新的权值计算方法 ...

  2. 2017.10.4 国庆清北 D4T2 正方形

    题目描述 在一个10000*10000的二维平面上,有n颗糖果. LYK喜欢吃糖果!并且它给自己立了规定,一定要吃其中的至少C颗糖果! 事与愿违,LYK只被允许圈出一个正方形,它只能吃在正方形里面的糖 ...

  3. 2017.10.6 国庆清北 D6T2 同余方程组

    题目描述 求关于x 的同余方程组 x%a1 = b1 x%a2 = b2 x%a3 = b3 x%a4 = b4 的大于等于0 的最小整数解. 输入输出格式 输入格式: 一行8 个整数,表示a1; b ...

  4. 2017.10.6 国庆清北 D6T1 排序

    题目描述 小Z 有一个数字序列a1; a2; .... ; an,长度为n,小Z 只有一个操作:选 定p(1<p<n),然后把ap 从序列中拿出,然后再插⼊到序列中任意位置. 比如a 序列 ...

  5. 2017.10.3 国庆清北 D3T3 解迷游戏

    题目描述 LYK进了一家古董店,它很想买其中的一幅画.但它带的钱不够买这幅画. 幸运的是,老板正在研究一个问题,他表示如果LYK能帮他解出这个问题的话,就把这幅画送给它. 老板有一个n*m的矩阵,他想 ...

  6. 2017.10.3 国庆清北 D3T1 括号序列

    题目描述 LYK有一个括号序列,但这个序列不一定合法. 一个合法的括号序列如下: ()是合法的括号序列. 若A是合法的括号序列,则(A)是合法的括号序列. 若A和B分别是合法的括号序列,则AB是合法的 ...

  7. 2017.10.4 国庆清北 D4T1 财富

    (其实这题是luogu P1901 发射站 原题,而且数据范围还比luogu小) 题目描述 LYK有n个小伙伴.每个小伙伴有一个身高hi. 这个游戏是这样的,LYK生活的环境是以身高为美的环境,因此在 ...

  8. 2017.10.7 国庆清北 D7T1 计数

    题目描述 给出m个数a[1],a[2],…,a[m] 求1~n中有多少数不是a[1],a[2],…,a[m]的倍数. 输入输出格式 输入格式: 输入文件名为count.in. 第一行,包含两个整数:n ...

  9. 2017.10.5 国庆清北 D5T1 拼不出的数

    题目描述 3 个元素的集合{5,1,2}的所有子集的和分别是0,1,2,3,5,6,7,8.发现最小的不能由该集合子集拼出的数字是4. 现在给你一个n个元素的集合,问你最小的不能由该集合子集拼出的数字 ...

随机推荐

  1. UOJ269 清华集训2016 如何优雅地求和 下降幂多项式、NTT

    代码 神仙题? 看到连续的点值,那么一定是要利用到连续点值的性质,可以考虑下降幂多项式,即考虑多项式\(F(x) = \sum\limits_{i=0}^m a_ix^{\underline i}\) ...

  2. .net core使用ocelot---第七篇 服务发现

    简介 .net core使用ocelot---第一篇 简单使用   .net core使用ocelot---第二篇 身份验证使用  .net core使用ocelot---第三篇 日志记录  .net ...

  3. Mycat分布式数据库架构解决方案--schema.xml详解

    echo编辑整理,欢迎转载,转载请声明文章来源.欢迎添加echo微信(微信号:t2421499075)交流学习. 百战不败,依不自称常胜,百败不颓,依能奋力前行.--这才是真正的堪称强大!!! 该文件 ...

  4. 超详细Vue实现导航栏绑定内容锚点+滚动动画+vue-router(hash模式可用)

    超详细Vue实现导航栏绑定内容锚点+滚动动画+vue-router(hash模式可用) 转载自:https://www.jianshu.com/p/2ad8c8b5bf75 亲测有效~ <tem ...

  5. 使用layui框架根据字段来设置tr行的背景色

    问题来源:最近在写公司项目时使用layui遇见的问题,老板要求根据td字段来设置整行tr的背景色. 解决:一开始数据比较少的时候只是直接在页面根据js动态判断字段然后来更改背景色,结果能够成功,但是后 ...

  6. Android ProGuard:代码混淆压缩

    写这篇文章的目的 一直以来,在项目中需要进行代码混淆时每次都要去翻文档,很麻烦.也没有像写代码那样记得那么多.既然要查来查去,就不如自己捋一捋这个知识点了,被人写的终究还是别人的.所以自己去翻看了很多 ...

  7. datatables 自定义排序

    参考:https://datatables.net/examples/plug-ins/sorting_manual $.fn.dataTable.ext.type.order['salary-gra ...

  8. 用c#监控网络流量

    using System; using System.Text; using System.Net; using System.Net.Sockets; using System.Runtime.In ...

  9. (多核DSP快速入门)SYS/BIOS入门

    (多核DSP快速入门)SYS/BIOS入门   原创文章 转载请注册来源http://blog.csdn.net/tostq 系列教程目录:http://blog.csdn.net/tostq/art ...

  10. mysql学习之基础篇07

    视图:view 在查询的时候我们经常把查询到的结果当成一张临时表来看,其实view就可以看成一张虚拟表,是表通过某种运算得到的投影 那么如何创建视图?创建视图需要指定视图的列名和列类型吗? 答:不用, ...