[JOISC2014]バス通学

题目大意:

有\(n(n\le10^5)\)个点和\(m(m\le3\times10^5)\)条交通线路。第\(i\)条交通线路可以让你在时间\(x_i\)从\(a_i\)出发,并在\(y_i\)时到达\(b_i\)。\(q(q\le10^5)\)次询问,每次询问若要在时间\(l_i\)到达\(n\)点,最晚什么时候要从\(1\)点出发。

思路:

将每条交通线路拆成两种操作:出发和到达。

用\(f_i\)表示乘上第\(i\)辆车最晚几点出发,\(g_i\)表示到达第\(i\)个点最晚几点出发。

将所有操作按照发生的时间\(t_i\)排序,对于出发和到达,分别进行以下两种操作:

  1. 出发:询问\(g_{a_i}\)。
  2. 到达:用\(f_i\)更新\(g_{b_i}\)。

而对于最后的询问,也相当于第一种操作。

时间复杂度\(\mathcal O((m+q)\log(m+q))\)。

源代码:

  1. #include<cstdio>
  2. #include<cctype>
  3. #include<vector>
  4. #include<algorithm>
  5. inline int getint() {
  6. register char ch;
  7. while(!isdigit(ch=getchar()));
  8. register int x=ch^'0';
  9. while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0');
  10. return x;
  11. }
  12. const int N=1e5+1,M=3e5;
  13. int f[M*2],g[N];
  14. struct Query {
  15. int x,t,id;
  16. bool type;//0->Start, 1->End
  17. bool operator < (const Query &rhs) const {
  18. if(t==rhs.t) return type>rhs.type;
  19. return t<rhs.t;
  20. }
  21. };
  22. std::vector<Query> v;
  23. int main() {
  24. const int n=getint(),m=getint();
  25. for(register int i=0;i<m;i++) {
  26. const int x=getint(),y=getint(),s=getint(),t=getint();
  27. v.push_back((Query){x,s,i,0});
  28. v.push_back((Query){y,t,i,1});
  29. }
  30. const int q=getint();
  31. for(register int i=0;i<q;i++) {
  32. v.push_back((Query){n,getint(),m+i,0});
  33. }
  34. const int k=v.size();
  35. std::sort(v.begin(),v.end());
  36. std::fill(&g[2],&g[n]+1,-1);
  37. for(register int i=0;i<k;i++) {
  38. const int &x=v[i].x,&id=v[i].id;
  39. if(v[i].type) {//End
  40. g[x]=std::max(g[x],f[id]);
  41. } else {//Start
  42. f[id]=x!=1?g[x]:v[i].t;
  43. }
  44. }
  45. for(register int i=0;i<q;i++) {
  46. printf("%d\n",f[m+i]);
  47. }
  48. return 0;
  49. }

[JOISC2014]バス通学的更多相关文章

  1. C语言/C++编程学习:不做C/C++工作也要学C/C++的原因!

    C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...

  2. .Net小白的大学四年,内含面经

    大家好 我是码农阿宇,和博客园的广大兄弟一样,我们都喜欢.Net,但是你们是985/211,而我江西一所普通得不能再普通的二本大学---九江学院,大四毕业在即,英语四级未过(为什么强调这一点?见文末- ...

  3. Servlet----------Servlet 概述

    1.什么是Servlet Servle t是Java Web 的三大组件之一,它属于动态资源.Servlet 的作用是处理请求,服务器会把接收到时的请求交给 Servlet 来处理,在Servlet中 ...

  4. npm包管理工具在一般项目中的应用方法

    最近自己在有时间,在通学一些知识点,记录一下,以便以后使用方面 当我们在做项目的时候,如果需要到包管理工具,那么我们一定会经历以下流程: 1.首先在官网下载node.js,然后默认安装到C盘 检查是否 ...

  5. 模式识别之Earley算法入门详讲

    引言:刚学习模式识别时,读Earley算法有些晦涩,可能是自己太笨.看了网上各种资料,还是似懂非懂,后来明白了,是网上的前辈们境界太高,写的最基本的东西还是非常抽象,我都领悟不了,所以决定写个白痴版的 ...

  6. (笔记)快速入门PADS logic 到 layout

    以前从未接触过画板,先是硬着头皮边学边操作<Layout2007中文教程之PADS_Logic>,刚好在中秋节前把这个教程从头到尾通学了一遍,随后感觉这个教程有了方方面面但没有工程的系统性 ...

  7. 启动组织重整 Marvell追求创新文化

    最近接任Marvell技术长的Neil Kim正是该公司亟需的人才——他在今年四月加入后,预计将为Marvell带来正面.积极的改革契机,有机会让该公司彻底改头换面... 迈威尔科技(Marvell) ...

  8. N3_容易混淆的语法

    第一期   范围 -から-まで から-にかけて から-にわたって 词例 区别 -から-まで から-にかけて から-にわたって 时间范围 时间界限比较明确.不间断 不那么明确,大致的在这段时间,断断续续 ...

  9. 通过PHP工具箱-站点域名管理(创建本地虚拟主机)

    工具:php程序员工具箱(网上很多请自己搜索下载) 1.点击其它选项菜单 -> 选择站点域名管理.如下图 2.进入站点域名管理.如下图(初始的时候,站点为空) 3.设置站点管理.如下图 网站域名 ...

随机推荐

  1. sqlserver数据库不能重命名报错5030

    在学习asp.net的时候使用mssql'经常会出现这种错误,数据库不能重名名5030的错误,其实很简单原因就是有应用程序正在占用这个连接,使用这样一行命令就可以查询出正在占用的连接 use mast ...

  2. java.net.UnknownHostException: master

    1:如果你报这个错误,第一反应应该是本地的host文件没有配置服务器名称和对应的ip地址,这个反应就对了.贴一下错误和解决方法: java.net.UnknownHostException: mast ...

  3. snmp v3的安全配置 snmp认证与加密配置(53)

    http://www.ttlsa.com/zabbix/snmp-v3-configuration/

  4. mysql表管理

    4.1 查看所有表 查看所有表语句: show tables; 例: mysql> show tables; +-----------------+ | Tables_in_emp | +--- ...

  5. 学习之"setjmp和longjmp函数"

    Linux学习之"setjmp和longjmp函数"   转贴,原文地址:http://www.cnblogs.com/lq0729/archive/2011/10/23/2222 ...

  6. python 保存小数位,控制保存几位

    不知道怎么展示浮点数长度?? 看看例子就清楚了 a=0.2343545434564 print('%.3f'%a) #加点保留X个print('%3f'%a) #默认保留小数6个print('%03f ...

  7. ip 命令

    Linux的ip命令和ifconfig类似,但前者功能更强大,并旨在取代后者.使用ip命令,只需一个命令,你就能很轻松地执行一些网络管理任务.ifconfig是net-tools中已被废弃使用的一个命 ...

  8. unitest框架--认识与基本使用

    1.import unitest------套路1,必须导入!! 2.#创建测试类--------------------套路2,测试名自取,最好首字母大写,必须继承unitest下的Testcase ...

  9. kafka工作流程| 命令行操作

    1.  概述 数据层:结构化数据+非结构化数据+日志信息(大部分为结构化) 传输层:flume(采集日志--->存储性框架(如HDFS.kafka.Hive.Hbase))+sqoop(关系型数 ...

  10. LeetCode竞赛题:笨阶乘(我们设计了一个笨阶乘 clumsy:在整数的递减序列中,我们以一个固定顺序的操作符序列来依次替换原有的乘法操作符:乘法(*),除法(/),加法(+)和减法(-)。)

    通常,正整数 n 的阶乘是所有小于或等于 n 的正整数的乘积.例如,factorial(10) = 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1.相反,我们设计了一个笨 ...