Luogu P1607 庙会班车【线段树】By cellur925
题目传送门
据说可以用贪心做?算了算了...我都不会贪...。
开始想的是用线段树,先建出一颗空树,然后输进区间操作后就维护最大值,显然开始我忽视了班车的容量以及可以有多组奶牛坐在一起的信息。
我们肯定想要有更多的区间被选中,根据线段覆盖问题的套路,我们要优先选结束位置最小的,能选就选,但是需要判断下能不能选,就是比较下当前区间最大值和容量的关系,尽量加上,进行修改。说白了就是在维护带修改的区间最大值。
Code
![](/assets/blank.gif)
![](/assets/blank.gif)
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相关推荐
- 【Luogu】P1607庙会班车Fair Shuttle(线段树+贪心)
我不会做贪心题啊--贪心题啊--题啊--啊-- 我真TM菜爆了啊-- 这题就像凌乱的yyy一样,把终点排序,终点相同的按起点排序.然后维护一个查询最大值的线段树.对于一个区间[l,r],如果这个区间已 ...
- [ Luogu 3924 ] 康纳的线段树
\(\\\) \(Description\) 现在有一个线段树维护长为\(N\)的数列,实现方式是\(mid=((l+r)>>1)\),支持区间加,节点维护区间和. 共有\(M\)次区间加 ...
- Luogu P1198 [JSOI2008]最大数 线段树
P1198 [JSOI2008]最大数 题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 限制: ...
- LUOGU P4088 [USACO18FEB]Slingshot(线段树)
传送门 解题思路 推了推式子发现是个二维数点,想了想似乎排序加线段树难写,就写了个树套树,结果写完看见空间才\(128M\)..各种奇技淫巧卡空间还是\(MLE\)到天上.后来只好乖乖的写排序+线段树 ...
- 【线段树】[LUOGU 守墓人] [LUOGU 维护序列] 线段树模板题
题目: 题目链接:[LUOGU 守墓人] 题解: 线段树单点修改,区间修改,单点查询,区间查询,一系列线段树基本操作,模板打就好. (回头再补一个分块和树状数组的这种板子题,就是用分块和树状数组再写一 ...
- [BZOJ3211] 花神游历各国 - 线段树
3211: 花神游历各国 Time Limit: 5 Sec Memory Limit: 128 MB Submit: 4766 Solved: 1741 [Submit][Status][Dis ...
- [BZOJ5286][HNOI2018]转盘(线段树)
https://www.luogu.org/problemnew/show/P4425 这题暴力40..HNOI2018两天暴力加起来有310+.. 首先有个大家都说显然我不会的结论,肯定有种最优策略 ...
- [USACO09FEB]庙会班车Fair Shuttle 线段树维护maxx贪心
[USACO09FEB]庙会班车Fair Shuttle 线段树维护maxx&&贪心 题目描述 Although Farmer John has no problems walking ...
- luogu P5142 区间方差(线段树、乘法逆元)
luogu P5142 区间方差 本题要求维护模区间方差,很明显是一道数据结构题. 我们化简方差公式: 而平均数等于 可以发现,我们只需要维护序列的区间和和区间平方和,就可以维护平均数和方差. 区间和 ...
最新文章
- python基础知识面试题-python的一些基本概念知识和面试题
- python自定义分页器()转自https://www.cnblogs.com/yuanchenqi/articles/7652353.html
- K8S Deployment脚本部署Tomcat集群
- 《云原生人才计划之Kubernetes 技术图谱》发布!
- 【BZOJ 1566】 1566: [NOI2009]管道取珠 (DP)
- 硬盘检测工具Smartmontools安装、部署、使用
- 表面配准论文1--基于高阶图匹配方法的稠密表面配准
- 四川中职计算机专业考的学校,四川中职学校哪家专业
- apache虚拟主机名不区分大小写的解决办法
- ASP.NET 访问项目网站以外的目录文件
- VSCode安装教程(超详细)
- 三星S5P6818移植工程
- numpy.arctan, math.atan, math.atan2的区别
- 数据挖掘中的机器学习
- 日期之 显示法定格式的日期
- Home School Books美国家庭学校教育小学初中高中全套美语教材
- error MSB4184: 无法计算表达式
- SpringBoot25-spingboot数据访问-数据缓存Cache
- Jess学习基础(一)
- axi时序图_AXI4读写操作时序及AXI4猝发地址及选择
热门文章
- 机器学习中数据处理与可视化的python、numpy等常用函数
- kafka偏移量保存到mysql里_SparkStreaming+kafka保存offset的偏移量到mysql案例
- JavaWeb中使用session保持用户登录状态
- Java锁消除和锁粗化
- 一个aov网用邻接矩阵表示_一起看看啥是图论算法-第一期:图的基本表示
- 每次执行java命令 都要source_解决每次执行Java等命令时都要重新source /etc/profile后才能执行,否则找不到命令...
- python实现冒泡排序视频_Python实现冒泡排序算法的完整实例
- Java数据结构与算法:二叉树
- 使用RoundedBitmapDrawable快速生成圆角和圆形图片
- day02: SQL_DML, oracle中sql的各种查询