【BZOJ4843】[Neerc2016]Expect to Wait

Description

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

Input

第一行两个整数n,q(1<=n,q<=100000),表示有n个时刻有借书还书的情况,以及有q个询问。
接下来n行,每行表示一个操作,操作如下:
1."+ t k" 在t时刻有k本书被还回来。
2."- t k" 在t时刻有k个人来借书。
(1<=t<=1e9,1<=k<=10000)
输入顺序保证t递增。
接下来一行q个数,第i个数bi(1<=bi<=1e9)表示图书馆初始有bi本书,询问所有人的等待时间之和为多少。

Output

一共q行,每行一个数表示等待时间之和,如果存在一个人根本拿不到书,则输出INFINITY。

Sample Input

5 4
- 1 1
- 2 2
+ 4 1
- 6 1
+ 7 2
0 3 1 2

Sample Output

INFINITY
0
8
3

题解:将借书看成+x,换书看成-x,然后在时间轴上求前缀和,发现那些权值>0的线段的加权长度即时总等待时间。那么如果初始有y本书呢?则我们只需要计算所有权值>y的线段的加权长度。将所有线段排个序即可。

#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
const int maxn=100010;
int n,m,tot;
ll sum,sv,sl;
char str[10];
ll ans[maxn],t[maxn];
struct node
{
ll val,len;
}p[maxn];
struct query
{
int org;
ll val;
}q[maxn];
inline int rd()
{
int ret=0,f=1; char gc=getchar();
while(gc<'0'||gc>'9') {if(gc=='-')f=-f; gc=getchar();}
while(gc>='0'&&gc<='9') ret=ret*10+gc-'0',gc=getchar();
return ret*f;
}
bool cmp1(node a,node b)
{
return a.val>b.val;
}
bool cmp2(query a,query b)
{
return a.val>b.val;
}
int main()
{
n=rd(),m=rd();
int i,j,a;
for(i=1;i<=n;i++)
{
scanf("%s",str),t[i]=rd(),a=rd();
if(sum>0) p[++tot].val=sum,p[tot].len=t[i]-t[i-1];
if(str[0]=='+') a=-a;
sum+=a;
}
for(i=1;i<=m;i++) q[i].val=rd(),q[i].org=i;
sort(p+1,p+tot+1,cmp1);
sort(q+1,q+m+1,cmp2);
for(i=j=1;i<=m;i++)
{
for(;p[j].val>q[i].val&&j<=tot;j++) sv+=p[j].val*p[j].len,sl+=p[j].len;
if(q[i].val<sum) ans[q[i].org]=-1;
else ans[q[i].org]=sv-sl*q[i].val;
}
for(i=1;i<=m;i++)
{
if(ans[i]==-1) printf("INFINITY\n");
else printf("%lld\n",ans[i]);
}
return 0;
}

【BZOJ4843】[Neerc2016]Expect to Wait 排序的更多相关文章

  1. bzoj4843 [Neerc2016]Expect to Wait

    [Neerc2016]Expect to Wait Time Limit: 10 Sec Memory Limit: 128 MB Description ls最近开了一家图书馆,大家听说是ls开的, ...

  2. 「Neerc2016」Expect to Wait

    题目描述 ls最近开了一家图书馆,大家听说是ls开的,纷纷过来借书,自然就会出现供不应求的情况, 并且借书的过程类 似一个队列,每次有人来借书就将它加至队尾,每次有人来还书就把书借给队头的若干个人,定 ...

  3. Perl小知识点之排序sort

    脚本这种东西,就是要常用,否则一段时间不用就生疏了,因此决定时时记一些小知识点,一来回顾一下,二来需要的时候可以迅速获得提示. Sort by number You could now write a ...

  4. PHP 使用用户自定义的比较函数对数组中的值进行排序

    原文:PHP 使用用户自定义的比较函数对数组中的值进行排序 usort (PHP 4, PHP 5) usort —      使用用户自定义的比较函数对数组中的值进行排序 说明       bool ...

  5. April Fools Contest 2017 题解&源码(A,数学 B,数学 C,数学 D,字符串 E,数字逻辑 F,排序,卡时间,G,数学)

    A. Numbers Joke time limit per test:2 seconds memory limit per test:64 megabytes input:standard inpu ...

  6. [LeetCode] Max Chunks To Make Sorted II 可排序的最大块数之二

    This question is the same as "Max Chunks to Make Sorted" except the integers of the given ...

  7. 使用Spring JPA中Page、Pageable接口和Sort类完成分页排序

    显示时,有三个参数,前两个必填,第几页,一页多少个size,第三个参数默认可以不填. 但是发现这个方法已经过时了,通过查看它的源码发现,新方法为静态方法PageRequest of(page,size ...

  8. 剑指offer——面试题25:合并两个 排序的链表

    自己答案: ListNode* MergeTwoSortedList(ListNode* pHead1,ListNode* pHead2) { if(pHead1==nullptr&& ...

  9. Expect使用小记

    By francis_hao    May 31,2017   本文翻译了部分Expect的man手册,只选取了个人常用的功能,因此并不完善.   Expect是一个可以和交互式程序对话的程序 概述 ...

随机推荐

  1. (4)python tkinter-布局

    包装布局pack() 目前对它的感觉是,当一个窗体的对象都设置完属性后,最后用它来绑定到窗体上.之后就不能再设置属性了 名称 描述 取值范围 expand 当值为“yes”时,side选项无效.组件显 ...

  2. Android学习--持久化(一) 文件存储

    持久化之   文件存储 这里把Android持久化全都整理一下,这一篇文章先简单的说一下文件的存储,通过下面一个简单的Demo,理解一下这个文件存储,先说说下面Demo的思路: 1.创建EditTex ...

  3. Hadoop OutputFormat浅析

    问题:reduce输出时,如果不是推测任务写结果时会先写临时目录最后移动到输出目录吗? 下面部分转自Hadoop官网说明 OutputFormat 描述Map/Reduce作业的输出样式. Map/R ...

  4. 洛谷——P1227 [JSOI2008]完美的对称

    P1227 [JSOI2008]完美的对称 题目描述 在峰会期间,必须使用许多保镖保卫参加会议的各国代表.代表们除了由他自己的随身保镖保护外,组委会还指派了一些其他的特工和阻击手保护他们.为了使他们的 ...

  5. MyBatis动态SQL底层原理分析 与 JavaScript中的Date对象,以及UTC、GMT、时区的关系

    http://fangjian0423.github.io/categories/mybatis/ http://xtutu.me/the-date-object-in-js/

  6. Linux网络协议栈之数据包处理过程

    http://blog.csdn.net/cheng_fangang/article/details/8966242

  7. ylb:SQL 视图(View)基础

    ylbtech-SQL Server: SQL Server-SQL 视图(View)基础 SQL 视图(View)基础. 1,ylb:视图(View)基础返回顶部 -- ============== ...

  8. span设置padding无效

    <span style="display:inline-block;padding-top:10px">测试<span> 给span加属性 display: ...

  9. 导出excel文件工具类

    package com.rrz.common.utils.excel; import java.io.IOException;import java.io.OutputStream;import ja ...

  10. Mockito 库、powermock扩展

    转载:http://blog.csdn.net/kittyboy0001/article/details/18709685 Mockito 简介 Mockito 是目前 java 单测中使用比较流行的 ...