「Neerc2016」Expect to Wait
题目描述
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
- #include <bits/stdc++.h>
- using namespace std;
- int N,Q,T[100005],K[100005],Now,NNow;
- long long Suffix[100005],Suffix1[100005];
- struct Node
- {
- int c;
- int T;
- }node[100005];
- int temp(Node x,Node y){return x.c<y.c;}
- char c[100005];
- char qwq[10005];
- int main()
- {
- freopen("expect.in","r",stdin);
- freopen("expect.out","w",stdout);
- cin>>N>>Q;
- for (int i=1;i<=N;i++)
- scanf("%s%d%d",&qwq,&T[i],&K[i]),c[i]=qwq[0];
- for (int i=1;i<=N;i++)
- {
- if (c[i]=='+') Now+=K[i];
- if (c[i]=='-') Now-=K[i];
- if (Now<0)
- node[i].c=-Now;
- if (i!=N)
- node[i].T=T[i+1]-T[i];
- }
- int rr=node[N].c;
- sort(node+1,node+N+1,temp);
- for (int i=N;i>=0;i--)
- {
- Suffix[i]=Suffix[i+1]+node[i].T;
- Suffix1[i]=Suffix1[i+1]+1ll*node[i].T*node[i].c*1ll;
- }
- for (int i=1;i<=Q;i++)
- {
- scanf("%d",&NNow);
- int l=0,r=N+1,anss=0;
- while (l<=r)
- {
- int mid=(l+r)>>1;
- if (node[mid].c<=NNow)
- l=mid+1;
- else r=mid-1,anss=mid;
- }
- if (NNow<rr)
- {
- printf("INFINITY\n");
- continue;
- }
- if (anss==0)
- {
- printf("0\n");
- continue;
- }
- long long ans=(Suffix1[anss])-1ll*NNow*(Suffix[anss]);
- printf("%lld\n",ans);
- }
- return 0;
- }
「Neerc2016」Expect to Wait的更多相关文章
- 「译」JUnit 5 系列:条件测试
原文地址:http://blog.codefx.org/libraries/junit-5-conditions/ 原文日期:08, May, 2016 译文首发:Linesh 的博客:「译」JUni ...
- 「译」JUnit 5 系列:扩展模型(Extension Model)
原文地址:http://blog.codefx.org/design/architecture/junit-5-extension-model/ 原文日期:11, Apr, 2016 译文首发:Lin ...
- JavaScript OOP 之「创建对象」
工厂模式 工厂模式是软件工程领域一种广为人知的设计模式,这种模式抽象了创建具体对象的过程.工厂模式虽然解决了创建多个相似对象的问题,但却没有解决对象识别的问题. function createPers ...
- 「C++」理解智能指针
维基百科上面对于「智能指针」是这样描述的: 智能指针(英语:Smart pointer)是一种抽象的数据类型.在程序设计中,它通常是经由类型模板(class template)来实做,借由模板(tem ...
- 「JavaScript」四种跨域方式详解
超详细并且带 Demo 的 JavaScript 跨域指南来了! 本文基于你了解 JavaScript 的同源策略,并且了解使用跨域跨域的理由. 1. JSONP 首先要介绍的跨域方法必然是 JSON ...
- 「2014-5-31」Z-Stack - Modification of Zigbee Device Object for better network access management
写一份赏心悦目的工程文档,是很困难的事情.若想写得完善,不仅得用对工具(use the right tools),注重文笔,还得投入大把时间,真心是一件难度颇高的事情.但,若是真写好了,也是善莫大焉: ...
- 「2014-3-18」multi-pattern string match using aho-corasick
我是擅(倾)长(向)把一篇文章写成杂文的.毕竟,写博客记录生活点滴,比不得发 paper,要求字斟句酌八股结构到位:风格偏杂文一点,也是没人拒稿的.这么说来,arxiv 就好比是 paper 世界的博 ...
- 「2014-3-17」C pointer again …
记录一个比较基础的东东-- C 语言的指针,一直让人又爱又恨,爱它的人觉得它既灵活又强大,恨它的人觉得它太过于灵活太过于强大以至于容易将人绕晕.最早接触 C 语言,还是在刚进入大学的时候,算起来有好些 ...
- 「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 =& ...
随机推荐
- Ubuntu 17 Nginx 配置 laravel 运行环境
1 安装 nginx #aptitude install nginx #apatitude install php7.1-fpm 2 在 /etc/nginx/sites-available 建立 s ...
- [IIS] 测试的产品登陆之后有个引用外部站点js的请求半天都无法返回,导致网页一直在打转,Selenium的driver也无法对页面进行下一步的操作
测试的产品登陆之后有个引用外部站点js的请求半天都无法返回: https://cdn.heapanalytics.com/js/heap-3497400264.js 这个js如果是在美国的机器上就可以 ...
- python 多线程简介
Thread类定义了以下常用方法与属性: Thread.getName() \Thread.setName():老方式用于获取和设置线程的名称,官方建议用Thread.name替代 Thread.id ...
- mysql导出导入sql文件方法(linux)
一.导入导出.sql文件for Linux: 1.从mysql中导出数据库test: 在终端运行:mysqldump -h localhost -u root -p test > /home/c ...
- win10 跳过max path 260限制
参考: https://www.howtogeek.com/266621/how-to-make-windows-10-accept-file-paths-over-260-characters/ 注 ...
- Linux服务器上日志报com.mysql.jdbc.PacketTooBigException: Packet for query is too large (1783 > 1024). You can change this value on the server by setting the max_allowed_packet' variable.
在做查询数据库操作时,报了以上错误,还有out of memery heap hacp ,原因是MySQL的max_allowed_packet设置过小引起的,我一开始设置的是1M,后来改为了20M ...
- 搭建jfinal框架时报 Could not load driverClass com.mysql.jdbc.Driver
搭建jfinal框架时报 Could not load driverClass com.mysql.jdbc.Driver 没有加载MySQL的驱动,你有没有把mysql的驱动包放到你项目的WEB-I ...
- win10下安装centos7双系统
国庆最后一天了,闲来无事装个双系统,用虚拟机的linux总有些不方便. window下安装linux双系统有两中方法: 1.U盘安装 (我采用的方法,后面详述) 2.EasyBCD工具安装 (使用Ea ...
- MySQL—练习
前面学习了MySQL的语句的基本用法,这里就开始做一些MySQL练习,这套题目一共45题,属于比较简单的,初学先试着做这个. 参考链接:https://www.cnblogs.com/SJP666/p ...
- URAL 1996 Cipher Message 3 (FFT + KMP)
转载请注明出处,谢谢http://blog.csdn.net/ACM_cxlove?viewmode=contents by---cxlove 题意 :给出两个串A , B,每个串是若干个byt ...