题目描述

ls最近开了一家图书馆,大家听说是ls开的,纷纷过来借书,自然就会出现供不应求的情况,
并且借书的过程类
似一个队列,每次有人来借书就将它加至队尾,每次有人来还书就把书借给队头的若干个人,定义每个人的等待时
间为拿到书的时刻减去加至队列的时刻,如果一个人根本就拿不到书,则等待时间为inf,现在给出所有时刻借书
还书的情况,和若干个询问,每次询问当图书馆初始有x本书时所有人的等待时间之和是多少(如果存在一个人根
本拿不到书,则输出INFINITY) 1<=n,q<=100000

Sol

[一费2/1 把


我!]

我们先考虑开始书的数量为0的时候,显然我们可以O(N)计算出每个点需要等待的人数,而总的等待时间就是每个点等待的人数求一下和233

考虑修改开始的书的数量到K的过程,其实就是把后面每个点的等待人数减去K,再把大于0的部分求一下和

那么现在我们就有一个非常显然的思路,二分

我们先根据每个点有多少个人在等待排一下序,排序完之后
我们每次就可以用一个log的效率去查找第一个被减去K不小于0的人的位置,然后求一个后缀和就可以了

至于无解的判断就是在K=0的时候,最后一个时间的等待的人数大于开始给的人数,就无解啦233

代码细节还是挺多的…建议考虑清楚再写…[多写了个等号挂了1个小时….]

Code

  1. #include <bits/stdc++.h>  
  2. using namespace std;  
  3. int N,Q,T[100005],K[100005],Now,NNow;  
  4. long long Suffix[100005],Suffix1[100005];  
  5. struct Node  
  6. {  
  7.     int c;  
  8.     int T;  
  9. }node[100005];  
  10. int temp(Node x,Node y){return x.c<y.c;}  
  11. char c[100005];  
  12. char qwq[10005];  
  13. int main()  
  14. {  
  15.     freopen("expect.in","r",stdin);  
  16.     freopen("expect.out","w",stdout);  
  17.     cin>>N>>Q;  
  18.         for (int i=1;i<=N;i++)  
  19.     scanf("%s%d%d",&qwq,&T[i],&K[i]),c[i]=qwq[0];  
  20.     for (int i=1;i<=N;i++)  
  21.     {  
  22.     if (c[i]=='+') Now+=K[i];  
  23.     if (c[i]=='-') Now-=K[i];  
  24.     if (Now<0)  
  25.       node[i].c=-Now;  
  26.     if (i!=N)   
  27.      node[i].T=T[i+1]-T[i];  
  28.     }  
  29.     int rr=node[N].c;      
  30.     sort(node+1,node+N+1,temp);  
  31.     for (int i=N;i>=0;i--)  
  32.     {  
  33.       Suffix[i]=Suffix[i+1]+node[i].T;  
  34.       Suffix1[i]=Suffix1[i+1]+1ll*node[i].T*node[i].c*1ll;  
  35.     }  
  36.   
     
  37.     for (int i=1;i<=Q;i++)  
  38.     {  
  39.        scanf("%d",&NNow);  
  40.        int l=0,r=N+1,anss=0;  
  41.        while (l<=r)  
  42.         {  
  43.         int mid=(l+r)>>1;  
  44.         if (node[mid].c<=NNow)  
  45.         l=mid+1;  
  46.         else r=mid-1,anss=mid;  
  47.         }  
  48.     if (NNow<rr)   
  49.     {  
  50.     printf("INFINITY\n");  
  51.     continue;  
  52.     }  
  53.     if (anss==0)  
  54.     {  
  55.     printf("0\n");  
  56.     continue;  
  57.     }  
  58.       long long ans=(Suffix1[anss])-1ll*NNow*(Suffix[anss]);  
  59.     printf("%lld\n",ans);  
  60.     }  
  61.     return 0;  

「Neerc2016」Expect to Wait的更多相关文章

  1. 「译」JUnit 5 系列:条件测试

    原文地址:http://blog.codefx.org/libraries/junit-5-conditions/ 原文日期:08, May, 2016 译文首发:Linesh 的博客:「译」JUni ...

  2. 「译」JUnit 5 系列:扩展模型(Extension Model)

    原文地址:http://blog.codefx.org/design/architecture/junit-5-extension-model/ 原文日期:11, Apr, 2016 译文首发:Lin ...

  3. JavaScript OOP 之「创建对象」

    工厂模式 工厂模式是软件工程领域一种广为人知的设计模式,这种模式抽象了创建具体对象的过程.工厂模式虽然解决了创建多个相似对象的问题,但却没有解决对象识别的问题. function createPers ...

  4. 「C++」理解智能指针

    维基百科上面对于「智能指针」是这样描述的: 智能指针(英语:Smart pointer)是一种抽象的数据类型.在程序设计中,它通常是经由类型模板(class template)来实做,借由模板(tem ...

  5. 「JavaScript」四种跨域方式详解

    超详细并且带 Demo 的 JavaScript 跨域指南来了! 本文基于你了解 JavaScript 的同源策略,并且了解使用跨域跨域的理由. 1. JSONP 首先要介绍的跨域方法必然是 JSON ...

  6. 「2014-5-31」Z-Stack - Modification of Zigbee Device Object for better network access management

    写一份赏心悦目的工程文档,是很困难的事情.若想写得完善,不仅得用对工具(use the right tools),注重文笔,还得投入大把时间,真心是一件难度颇高的事情.但,若是真写好了,也是善莫大焉: ...

  7. 「2014-3-18」multi-pattern string match using aho-corasick

    我是擅(倾)长(向)把一篇文章写成杂文的.毕竟,写博客记录生活点滴,比不得发 paper,要求字斟句酌八股结构到位:风格偏杂文一点,也是没人拒稿的.这么说来,arxiv 就好比是 paper 世界的博 ...

  8. 「2014-3-17」C pointer again …

    记录一个比较基础的东东-- C 语言的指针,一直让人又爱又恨,爱它的人觉得它既灵活又强大,恨它的人觉得它太过于灵活太过于强大以至于容易将人绕晕.最早接触 C 语言,还是在刚进入大学的时候,算起来有好些 ...

  9. 「2014-3-13」Javascript Engine, Java VM, Python interpreter, PyPy – a glance

    提要: url anchor (ajax) => javascript engine (1~4 articles) => java VM vs. python interpreter =& ...

随机推荐

  1. C++中函数模版与类模版

    1.什么是模板? (1)可以这样来解释这个问题,例如当我们需要定义多个函数,而这个函数功能其实都是一样的,例如两个数相加的函数, 只是相加的两个数的类型不相同而已,这就导致我们需要定义多个函数:当我们 ...

  2. CentOS 7下面配置静态IP

    CentOS 7.0系统是一个很新的版本哦,很多朋友都不知道CentOS 7.0系统是怎么去安装配置的哦,因为centos7.0与以前版本是有很大的改进哦. 说明:截止目前CentOS 7.x最新版本 ...

  3. Hadoop-2.7.2分布式安装手册

    目录 目录 1 1. 前言 3 2. 特性介绍 3 3. 部署 5 3.1. 机器列表 5 3.2. 主机名 5 3.2.1. 临时修改主机名 6 3.2.2. 永久修改主机名 6 3.3. 免密码登 ...

  4. 团体程序设计天梯赛L2-023 图着色问题 2017-04-17 09:28 269人阅读 评论(0) 收藏

    L2-023. 图着色问题 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 图着色问题是一个著名的NP完全问题.给定无向图 G ...

  5. 转发一篇能看懂的关于ingress的说明

    最近发现好多人问 Ingress,同时一直也没去用 Nginx 的 Ingress,索性鼓捣了一把,发现跟原来确实有了点变化,在这里写篇文章记录一下 https://mritd.me/2017/03/ ...

  6. solr-DIH:定时增量索引

    参考:官方文档,http://wiki.apache.org/solr/DataImportHandler#Scheduling googlecode 找到:https://code.google.c ...

  7. win server 2012 R2 你需要先安装 对应于 KB2919355 的更新

    产生阻滞的问题: 你需要先安装 对应于 KB2919355 的更新 ,然后才可在 Windows 8.1 或 Windows Server 2012 R2 上安装此产品. 官方说法(这些 KB 必须按 ...

  8. driver.get()和driver.navigate().to()到底有什么不同?-----Selenium快速入门(四)

    大家都知道,这两个方法都是跳转到指定的url地址,那么这两个方法有什么不同呢?遇到这种情况,第一反应就是查查官方的文档. 官方文档的说法是:Load a new web page in the cur ...

  9. UWP开发入门(二)——RelativePanel

    RelativePanel也是Win10 UWP新增的控件,和上篇提到的SplitView一样在UWP的UI布局起到非常重要的作用.说句实在话,这货其实就是为了UWP的Adaptive UI而特意增加 ...

  10. java.lang.NoSuchMethodError: javax.servlet.ServletContext.getContextPath()Ljava/lang/String;

    问题描述:在eclipse3.7中启动tomcat6时一直出现这个错误, java.lang.NoSuchMethodError: javax.servlet.ServletContext.getCo ...