显然所有询问都要经过至少$\sum d$,只需要考虑除了$\sum d$之外的等待红灯的时间。

将所有询问的时间模$g+r$,并按时间用set维护。

那么对于每个红灯,在set中可以找出$1$到$2$个区间,将里面所有的询问暴力取出,添加一个新点作为等到绿灯后的询问放入。

那么询问与新点之间构成了一棵树结构,每个询问实际的答案为它到根路径上所有点的答案之和。

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

  1. #include<cstdio>
  2. #include<algorithm>
  3. #include<set>
  4. using namespace std;
  5. typedef long long ll;
  6. typedef pair<ll,int>P;
  7. const int N=150010;
  8. int n,m,i,f[N],q[N],cnt,tot;ll A,B,per,d[N],x,w[N],sum;bool v[N];set<P>T;
  9. inline void read(ll&a){char c;while(!(((c=getchar())>='0')&&(c<='9')));a=c-'0';while(((c=getchar())>='0')&&(c<='9'))(a*=10)+=c-'0';}
  10. ll dfs(int x){
  11. if(v[x])return w[x];
  12. return v[x]=1,w[x]+=dfs(f[x]);
  13. }
  14. inline void solve(ll L,ll R,ll K){
  15. cnt=0;
  16. while(1){
  17. set<P>::iterator it=T.lower_bound(P(L,0));
  18. if(it==T.end())break;
  19. if(it->first>R)break;
  20. q[cnt++]=it->second;
  21. w[it->second]+=K-it->first;
  22. T.erase(it);
  23. }
  24. if(!cnt)return;
  25. tot++;
  26. for(int i=0;i<cnt;i++)f[q[i]]=tot;
  27. T.insert(P(K%per,tot));
  28. }
  29. inline void fix(ll L){
  30. L=(per-L+A)%per;
  31. ll R=L+B-1,K=R+1;
  32. solve(L,min(R,per-1),K);
  33. if(R>=per)solve(0,R%per,K-per);
  34. }
  35. int main(){
  36. scanf("%d%lld%lld",&n,&A,&B);
  37. per=A+B;
  38. for(i=0;i<=n;i++)read(d[i]);
  39. scanf("%d",&m);
  40. for(i=1;i<=m;i++)read(w[i]),T.insert(P(w[i]%per,i));
  41. for(tot=m,i=0;i<=n;i++){
  42. sum+=d[i];
  43. if(i<n)fix(sum%per);
  44. }
  45. for(i=1;i<=m;i++)printf("%lld\n",dfs(i)+sum);
  46. return 0;
  47. }

  

BZOJ5254 : [Fjwc2018]红绿灯的更多相关文章

  1. [Bzoj5254][Fjwc2018]红绿灯(线段树)

    5254: [Fjwc2018]红绿灯 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 31  Solved: 24[Submit][Status][D ...

  2. BZOJ5254 FJWC2018红绿灯(线段树)

    注意到一旦在某个路口被红灯逼停,剩下要走的时间是固定的.容易想到预处理出在每个路口被逼停后到达终点的最短时间,这样对于每个询问求出其最早在哪个路口停下就可以了.对于预处理,从下一个要停的路口倒推即可. ...

  3. BZOJ 5254 [Fjwc2018]红绿灯 (线段树)

    题目大意:一个wly从家走到学校要经过n个红绿灯,绿灯持续时间是$g$,红灯是$r$,所有红绿灯同时变红变绿,交通规则和现实中一样,不能抢红灯,两个红绿灯之间道路的长度是$di$,一共$Q$个询问,求 ...

  4. FJWC2018

    晚上水到8:40,感觉药丸. 把电脑带回寝室,大半夜敲键盘…… bzoj5254红绿灯 泰迪每天都要通过一条路从家到学校,这条路的起点是泰迪家,终点则是学校. 这条路中间还有n个路口,从第i-1个路口 ...

  5. 【原作】关于Dynpro中的红绿灯显示

    问题源自李宁的需求,就不说了. 关于ABAP中的红绿灯网上也有很多资料,不过貌似都是ABAP的程序,没怎么注意.后来根据需求要在Dynpro上也做出那样的效果,所以,研究了一下. 这种红绿灯在ABAP ...

  6. 面试 | 商汤科技面试经历之Promise红绿灯的实现

    说在前面 说实话,刚开始在听到这个面试题的实话,我是诧异的,红绿灯?这不是单片机.FPGA.F28335.PLC的实验吗?! 而且还要用Promise去写,当时我确实没思路,只好硬着头皮去写,下来再r ...

  7. 一个 div 手写红绿灯- 分别用css3 和 js 实现

    [要求] 一个div,配合 css3 或者 js 实现红绿灯切换的效果. [思路] 使用 css3,要实现红绿灯颜色的变换必然要用到 animation 动画,通过 keyframes 控制颜色的渐变 ...

  8. Python 实现红绿灯

    一.通过Event来实现两个或多个线程间的交互,下面是一个红绿灯的例子,即起动一个线程做交通指挥信号灯,一个线程做车辆,车辆行驶按红灯停,绿灯行的规则. #!/usr/bin/python # -*- ...

  9. 用promise和async/await分别实现红绿灯

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

随机推荐

  1. 主机管理+堡垒机系统开发:strace命令用法详解(六)

    一.简单介绍 strace是什么? 按照strace官网的描述, strace是一个可用于诊断.调试和教学的Linux用户空间跟踪器.我们用它来监控用户空间进程和内核的交互,比如系统调用.信号传递.进 ...

  2. 分布式监控系统开发【day38】:报警阈值程序逻辑解析(三)

    一.需求讨论 1.请问如何解决延迟问题 1000台机器,每1分钟循环一次但是刚好第一次循环第一秒刚处理完了,结果还没等到第二分钟又出问题,你那必须等到第二次循环,假如我这个服务很重要必须实时知道,每次 ...

  3. kubernetes云平台管理实战: 滚动升级秒级回滚(六)

    一.nginx保证有两个版本 1.查看当前容器运行nginx版本 [root@k8s-master ~]# kubectl get pod -o wide NAME READY STATUS REST ...

  4. [Android] Android Java String 转Uri

    Uri uri = Uri.parse("https://www.baidu.com") URI uri = new URI("https://www.baidu.com ...

  5. IScroll某些手机下不触发ScrollEnd问题处理

    同样是微信7.0,看起来内核都是x5内核,两款不同的手机,一个有问题,一个没有问题. IScroll在问题手机下会出现快速拨动时候不触发ScrollEnd事件现象,轻点一次才会触发,解决办法 docu ...

  6. 使用系统用户登录Oracle

    如果数据库安装不在本机上,@后面加的是服务名或IP地址 如果是sys用户的话,它具有管理员的权限,要使用sysdba或sysoper权限来登录oracle工具.

  7. Centos-6服务器源配置(使用阿里云的源镜像)

    首先在VM中安装从 https://mirrors.aliyun.com/centos/ 中下载好的centos镜像(这里以centos6.9 64 为例). 安装完成后先要进行备份  mv /etc ...

  8. docker创建Redis集群

    开始工作: yum install wegt ##安装下载工具 yum install net-tools ##安装网络工具 yum install tree ##安装tree命令(方便查看集群配置文 ...

  9. Selenium Navigation

    Navigating Navigate a link with WebDriver: driver.get("http://www.google.com") 1.Interacti ...

  10. dos.orm

    引言: Dos.ORM(原Hxj.Data)于2009年发布.2015年正式开源,该组件已在数百个成熟项目中应用,是目前国内用户量最大.最活跃.最完善的国产ORM.初期开发过程中参考了NBear与My ...