题目传送门

据说可以用贪心做?算了算了...我都不会贪...。


开始想的是用线段树,先建出一颗空树,然后输进区间操作后就维护最大值,显然开始我忽视了班车的容量以及可以有多组奶牛坐在一起的信息。

我们肯定想要有更多的区间被选中,根据线段覆盖问题的套路,我们要优先选结束位置最小的,能选就选,但是需要判断下能不能选,就是比较下当前区间最大值和容量的关系,尽量加上,进行修改。说白了就是在维护带修改的区间最大值。

Code

 1 #include<cstdio>
 2 #include<algorithm>
 3
 4 using namespace std;
 5
 6 int k,n,c,ans;
 7 struct moo{
 8     int f,t,sum;
 9 }cow[50090];
10 struct SegmentTree{
11     int l,r,val,lazy;
12 }t[20090*4];
13
14 bool cmp(moo a,moo b)
15 {
16     return a.t<b.t;
17 }
18
19 void build(int p,int l,int r)
20 {
21     t[p].l=l,t[p].r=r;
22     if(l==r) return ;
23     int mid=(l+r)>>1;
24     build(p*2,l,mid);
25     build(p*2+1,mid+1,r);
26 }
27
28 void update(int p)
29 {
30     if(!t[p].lazy) return ;
31     if(t[p].l==t[p].r) return ;
32     t[p*2].val+=t[p].lazy;
33     t[p*2+1].val+=t[p].lazy;
34     t[p*2].lazy+=t[p].lazy;
35     t[p*2+1].lazy+=t[p].lazy;
36     t[p].lazy=0;
37 }
38
39 void change(int p,int l,int r,int x)
40 {
41     update(p);
42     if(t[p].l==l&&t[p].r==r)
43     {
44         t[p].val+=x;
45         t[p].lazy+=x;
46         return ;
47     }
48     int mid=(t[p].l+t[p].r)>>1;
49     if(l>mid) change(p*2+1,l,r,x);
50     else if(r<=mid) change(p*2,l,r,x);
51     else change(p*2,l,mid,x),change(p*2+1,mid+1,r,x);
52     t[p].val=max(t[p*2].val,t[p*2+1].val);
53 }
54
55 int ask(int p,int l,int r)
56 {
57     update(p);
58     if(t[p].l==l&&t[p].r==r) return t[p].val;
59     int mid=(t[p].l+t[p].r)>>1;
60     if(l>mid) return ask(p*2+1,l,r);
61     else if(r<=mid) return ask(p*2,l,r);
62     else return max(ask(p*2,l,mid),ask(p*2+1,mid+1,r));
63 }
64
65 int main()
66 {
67     scanf("%d%d%d",&k,&n,&c);
68     for(int i=1;i<=k;i++)
69         scanf("%d%d%d",&cow[i].f,&cow[i].t,&cow[i].sum);
70     sort(cow+1,cow+1+k,cmp);
71     build(1,1,n);
72     for(int i=1;i<=k;i++)
73     {
74         int sta=ask(1,cow[i].f,cow[i].t),res=0;
75         if(sta>=c) continue;
76         if(sta+cow[i].sum<=c) res=cow[i].sum;
77         else res=c-sta;
78         ans+=res;
79         change(1,cow[i].f,cow[i].t-1,res);
80     }
81     printf("%d",ans);
82     return 0;
83 }

View Code

注意,最后修改时[l,r]的区间应在[l,r-1]上做改动,因为在r时刻,可理解为那群奶牛立即下车,有新的奶牛立即上车。

转载于:https://www.cnblogs.com/nopartyfoucaodong/p/9746533.html

Luogu P1607 庙会班车【线段树】By cellur925相关推荐

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

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

  2. [ Luogu 3924 ] 康纳的线段树

    \(\\\) \(Description\) 现在有一个线段树维护长为\(N\)的数列,实现方式是\(mid=((l+r)>>1)\),支持区间加,节点维护区间和. 共有\(M\)次区间加 ...

  3. Luogu P1198 [JSOI2008]最大数 线段树

    P1198 [JSOI2008]最大数 题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 限制: ...

  4. LUOGU P4088 [USACO18FEB]Slingshot(线段树)

    传送门 解题思路 推了推式子发现是个二维数点,想了想似乎排序加线段树难写,就写了个树套树,结果写完看见空间才\(128M\)..各种奇技淫巧卡空间还是\(MLE\)到天上.后来只好乖乖的写排序+线段树 ...

  5. 【线段树】[LUOGU 守墓人] [LUOGU 维护序列] 线段树模板题

    题目: 题目链接:[LUOGU 守墓人] 题解: 线段树单点修改,区间修改,单点查询,区间查询,一系列线段树基本操作,模板打就好. (回头再补一个分块和树状数组的这种板子题,就是用分块和树状数组再写一 ...

  6. [BZOJ3211] 花神游历各国 - 线段树

    3211: 花神游历各国 Time Limit: 5 Sec  Memory Limit: 128 MB Submit: 4766  Solved: 1741 [Submit][Status][Dis ...

  7. [BZOJ5286][HNOI2018]转盘(线段树)

    https://www.luogu.org/problemnew/show/P4425 这题暴力40..HNOI2018两天暴力加起来有310+.. 首先有个大家都说显然我不会的结论,肯定有种最优策略 ...

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

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

  9. luogu P5142 区间方差(线段树、乘法逆元)

    luogu P5142 区间方差 本题要求维护模区间方差,很明显是一道数据结构题. 我们化简方差公式: 而平均数等于 可以发现,我们只需要维护序列的区间和和区间平方和,就可以维护平均数和方差. 区间和 ...

最新文章

  1. python基础知识面试题-python的一些基本概念知识和面试题
  2. python自定义分页器()转自https://www.cnblogs.com/yuanchenqi/articles/7652353.html
  3. K8S Deployment脚本部署Tomcat集群
  4. 《云原生人才计划之Kubernetes 技术图谱》发布!
  5. 【BZOJ 1566】 1566: [NOI2009]管道取珠 (DP)
  6. 硬盘检测工具Smartmontools安装、部署、使用
  7. 表面配准论文1--基于高阶图匹配方法的稠密表面配准
  8. 四川中职计算机专业考的学校,四川中职学校哪家专业
  9. apache虚拟主机名不区分大小写的解决办法
  10. ASP.NET 访问项目网站以外的目录文件
  11. VSCode安装教程(超详细)
  12. 三星S5P6818移植工程
  13. numpy.arctan, math.atan, math.atan2的区别
  14. 数据挖掘中的机器学习
  15. 日期之 显示法定格式的日期
  16. Home School Books美国家庭学校教育小学初中高中全套美语教材
  17. error MSB4184: 无法计算表达式
  18. SpringBoot25-spingboot数据访问-数据缓存Cache
  19. Jess学习基础(一)
  20. axi时序图_AXI4读写操作时序及AXI4猝发地址及选择

热门文章

  1. 机器学习中数据处理与可视化的python、numpy等常用函数
  2. kafka偏移量保存到mysql里_SparkStreaming+kafka保存offset的偏移量到mysql案例
  3. JavaWeb中使用session保持用户登录状态
  4. Java锁消除和锁粗化
  5. 一个aov网用邻接矩阵表示_一起看看啥是图论算法-第一期:图的基本表示
  6. 每次执行java命令 都要source_解决每次执行Java等命令时都要重新source /etc/profile后才能执行,否则找不到命令...
  7. python实现冒泡排序视频_Python实现冒泡排序算法的完整实例
  8. Java数据结构与算法:二叉树
  9. 使用RoundedBitmapDrawable快速生成圆角和圆形图片
  10. day02: SQL_DML, oracle中sql的各种查询