codeforces644B. Processing Queries (模拟)
In this problem you have to simulate the workflow of one-thread server. There are n queries to process, the i-th
will be received at moment ti and
needs to be processed for di units
of time. All ti are
guaranteed to be distinct.
When a query appears server may react in three possible ways:
- If server is free and query queue is empty, then server immediately starts to process this query.
- If server is busy and there are less than b queries in the queue, then new query is added to the end of the queue.
- If server is busy and there are already b queries pending in the queue, then new query is just rejected and will never be processed.
As soon as server finished to process some query, it picks new one from the queue (if it's not empty, of course). If a new query comes at some moment x,
and the server finishes to process another query at exactly the same moment, we consider that first query is picked from the queue and only then new query appears.
For each query find the moment when the server will finish to process it or print -1 if this query will be rejected.
The first line of the input contains two integers n and b (1 ≤ n, b ≤ 200 000) —
the number of queries and the maximum possible size of the query queue.
Then follow n lines with queries descriptions (in chronological order). Each description consists of two integers ti and di (1 ≤ ti, di ≤ 109),
where ti is
the moment of time when the i-th query appears and di is
the time server needs to process it. It is guaranteed that ti - 1 < ti for
all i > 1.
Print the sequence of n integers e1, e2, ..., en,
where ei is
the moment the server will finish to process the i-th query (queries are numbered in the order they appear in the input) or - 1 if
the corresponding query will be rejected.
5 1
2 9
4 8
10 9
15 2
19 1
11 19 -1 21 22
4 1
2 8
4 8
10 9
15 2
10 18 27 -1
Consider the first sample.
- The server will start to process first query at the moment 2 and will finish to process it at the moment 11.
- At the moment 4 second query appears and proceeds to the queue.
- At the moment 10 third query appears. However, the server is still busy with query 1, b = 1 and
there is already query 2 pending in the queue, so third query is just rejected. - At the moment 11 server will finish to process first query and will take the second query from the queue.
- At the moment 15 fourth query appears. As the server is currently busy it proceeds to the queue.
- At the moment 19 two events occur simultaneously: server finishes to proceed the second query and the fifth query appears. As was said in the
statement above, first server will finish to process the second query, then it will pick the fourth query from the queue and only then will the fifth query appear. As the queue is empty fifth query is proceed there. - Server finishes to process query number 4 at the moment 21.
Query number 5 is picked from the queue. - Server finishes to process query number 5 at the moment 22.
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<stack>
#include<string>
#include<bitset>
#include<algorithm>
using namespace std;
typedef long long ll;
typedef long double ldb;
#define inf 99999999
#define pi acos(-1.0)
#define maxn 200050
ll t[maxn],d[maxn];
int q[511111];
ll ans[maxn];
int main()
{
int i,j,x;
ll n,m,b,ed;
while(scanf("%lld%lld",&n,&b)!=EOF)
{
for(i=1;i<=n;i++){
scanf("%lld%lld",&t[i],&d[i]);
}
int front,rear;
front=1;rear=0;
ed=0;
for(i=1;i<=n;i++){
while(front<=rear){
x=q[front];
if(ed<=t[i]){
ed=max(ed,t[x])+d[x];
ans[x]=ed;
front++;
}
else break;
}
if(ed<=t[i] && front>rear ){
ed=t[i]+d[i];
ans[i]=ed;
}
else if(rear-front+1<b){
rear++;
q[rear]=i;
}
else ans[i]=-1;
}
while(front<=rear){
x=q[front];
front++;
ed=max(ed,t[x])+d[x];
ans[x]=ed;
}
for(i=1;i<=n;i++){
if(i==n)printf("%lld\n",ans[i]);
else printf("%lld ",ans[i]);
}
}
return 0;
}
codeforces644B. Processing Queries (模拟)的更多相关文章
- CROC 2016 - Qualification B. Processing Queries 模拟
B. Processing Queries 题目连接: http://www.codeforces.com/contest/644/problem/B Description In this prob ...
- Code Forces 644B Processing Queries
B. Processing Queries time limit per test5 seconds memory limit per test256 megabytes inputstandard ...
- Codeforces Round #515 (Div. 3) C. Books Queries (模拟)
题意:有一个一维的书架,\(L\)表示在最左端放一本书,\(R\)表示在最右端放一本书,\(?\)表示从左数或从右数,最少数多少次才能得到要找的书. 题解:我们开一个稍微大一点的数组,从它的中间开始模 ...
- 代码本色 用编程模拟自然系统 (Daniel Shiffman 著)
https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.5.7/p5.js http://www.box2d.org http://www.jbox2d.org ...
- Programming Entity Framework 翻译(1)-目录
1. Introducing the ADO.NET Entity Framework ado.net entity framework 介绍 1 The Entity Relationship Mo ...
- 【mysql】关于临时表
mysql官方的介绍 In some cases, the server creates internal temporary tables while processing queries. Suc ...
- open_table与opened_table
好多人在调优Mysql的时候,总是对open_tables和opend_tables两个参数分别不清. 网上好多解释都是这样的:open_tables:当前打开表的数量opened_tables:当前 ...
- 【MySQL】查询使用临时表
MySQL查询产生临时表的分析 官网说明的地址:http://dev.mysql.com/doc/refman/5.5/en/internal-temporary-tables.html 参考:htt ...
- mysql --The MEMORY Storage Engine--官方文档
原文地址:http://dev.mysql.com/doc/refman/5.7/en/memory-storage-engine.html The MEMORY storage engine (fo ...
随机推荐
- IO软件层次结构与假脱机技术
IO软件层次结构 用户层软件->设备独立性软件->设备驱动软件->中断处理程序->硬件 用户层软件实现与用户交互的接口,用户可直接使用该层提供的,与IO操作相关的库函数对设备进 ...
- Ubuntu_Gedit配置
Ubuntu_Gedit配置 为了换Ubuntu的时候能够更加方便,不用再用手重新打一遍代码,丢几个Gedit配置-- External Tools gdb compile (F2) #!/bin/s ...
- 创建mysql帐户
CREATE USER 'username'@'host' IDENTIFIED BY 'password';
- 【EXPDP】Oracle expdp中并行问题
$ expdp hr/hr tables=test1 dumpfile=test2.dmp directory=pump parallel=4 Export: Release 11.2.0.4.0 - ...
- oracle 释放表空间到OS(resize)
1.查看表空间里面的对象 SELECT OWNER AS OWNER, SEGMENT_NAME AS SEGMENT_NAME, SEGMENT_TYPE AS SEGMENT_TYPE, SUM ...
- OLED的波形曲线、进度条、图片显示(STM32 HAL库 模拟SPI通信 5线OLED屏幕)详细篇
少废话,先上效果图 屏幕显示效果 全家福 一.基础认识及引脚介绍 屏幕参数: 尺寸:0.96英寸 分辨率:128*64 驱动芯片:SSD1306 驱动接口协议:SPI 引脚说明: 二. ...
- Spider爬虫基础
get获取某个网站的html代码,post访问网站获取网站返回的信息 import urllib.request import urllib.parse #使用get请求 def start1(): ...
- 使用Azure Runbook 发送消息到Azure Storage Queue
客户需要定时发送信息到Azure Storage Queue,所以尝试使用Azure Runbook实现这个需求. 首先新增一个Azure Automation Account的资源. 因为要使用Az ...
- 大数据系列2:Hdfs的读写操作
在前文大数据系列1:一文初识Hdfs中,我们对Hdfs有了简单的认识. 在本文中,我们将会简单的介绍一下Hdfs文件的读写流程,为后续追踪读写流程的源码做准备. Hdfs 架构 首先来个Hdfs的架构 ...
- 浅析Redis与IO多路复用器原理
为什么Redis使用多路复用I/O Redis 是跑在单线程中的,所有的操作都是按照顺序线性执行的,但是由于读写操作等待用户输入或输出都是阻塞的,所以 I/O 操作在一般情况下往往不能直接返回,这会导 ...