博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ4239 : 巴士走读
阅读量:6553 次
发布时间:2019-06-24

本文共 1174 字,大约阅读时间需要 3 分钟。

考虑按时刻从早到晚模拟,计算出

f[i]:到达i点的最晚出发时间

g[i]:为了赶上第i辆车的最晚出发时间

然后将所有到达n号点的巴士按到达时间排序,查询的时候二分查找即可。

时间复杂度$O(n\log n)$。

 

#include
#include
#include
#include
#define N 300010#define X first#define Y secondusing namespace std;typedef pair
P;int n,m,i,x,f[N],g[N],cnt;P t,h[N];priority_queue

,greater

>Q;struct E{int a,b,x,y;}e[N];inline bool cmp(const E&a,const E&b){return a.x

='0')&&(c<='9')));a=c-'0';while(((c=getchar())>='0')&&(c<='9'))(a*=10)+=c-'0';}inline int ask(){ int l=1,r=cnt,mid,t=0; while(l<=r)if(h[mid=(l+r)>>1].X<=x)l=(t=mid)+1;else r=mid-1; return h[t].Y;}int main(){ for(read(n),read(m),i=1;i<=m;i++)read(e[i].a),read(e[i].b),read(e[i].x),read(e[i].y); for(f[1]=86400000,i=2;i<=n;i++)f[i]=-1; for(sort(e+1,e+m+1,cmp),i=1;i<=m;i++){ while(!Q.empty()&&Q.top().X<=e[i].x)t=Q.top(),Q.pop(),f[e[t.Y].b]=max(f[e[t.Y].b],g[t.Y]); g[i]=min(f[e[i].a],e[i].x),Q.push(P(e[i].y,i)); if(e[i].b==n)h[++cnt]=P(e[i].y,g[i]); } for(h[0]=P(-1,-1),sort(h+1,h+cnt+1),i=2;i<=cnt;i++)h[i].Y=max(h[i].Y,h[i-1].Y); for(read(m);m--;printf("%d\n",ask()))read(x); return 0;}

  

转载地址:http://hvjco.baihongyu.com/

你可能感兴趣的文章
Redis小记
查看>>
Map集合案例
查看>>
《FPGA全程进阶---实战演练》第十一章 VGA五彩缤纷
查看>>
C# for循环①护栏长度 ②广场砖面积 ③判断闰年平年
查看>>
mysql数据库中,查看数据库的字符集(所有库的字符集或者某个特定库的字符集)...
查看>>
LintCode刷题——打劫房屋I、II、III
查看>>
第七次课程作业
查看>>
C++ 文本查询2.0(逻辑查询)
查看>>
Objective-C学习总结-13协议1
查看>>
web学习方向
查看>>
寒假训练营第四次作业
查看>>
SQLServer 维护脚本分享(05)内存(Memory)
查看>>
A*算法实现
查看>>
第一周 从C走进C++ 002 命令行参数
查看>>
【java】itext pdf 分页
查看>>
看看这个电脑的配置
查看>>
用户自定义控件(.ascx)
查看>>
[转]【NoSQL】NoSQL入门级资料整理(CAP原理、最终一致性)
查看>>
RequireJS进阶(二)
查看>>
.NET中数组的隐秘特性
查看>>