题目描述
某银行只有一个ATM取款机,有N个人陆续来使用ATM机,编号按照到达的时间次序为1,2,3,...,N。已知每个人有到达时间di和需要处理的时间ti。如果前面有人还没有操作完,就要排队,但如果排队的人已经有5个,刚到达的人就会转到其他地方去。(如果第1个人刚好操作完成,刚到达的人一定是可以排队的)
输入数据中有一些数据的ti是-1,这表示来的人不是来排队的,是有特别任务:他询问排队的最后一个人的编号。如果排队的队伍为空,输出-1。
请编程输出这些询问出的编号。
输入
第一行1个正整数:N,范围在[1,100000]。
第2到N+1行:每行2个整数di和ti,di范围在[1,1000000],ti范围在[-1,100]。
输入保证di是递增的。
输出
一行,一些整数,表示询问出的编号,每两个数之间用一个空格隔开。
数据
Input
10
2 9
3 10
5 3
6 -1
7 4
9 10
10 5
11 3
200 1
201 -1
Output
3 -1
##我的不知道为什么CE的代码
#include<bits/stdc++.h>
using namespace std;
const int maxN=1e5+9;
struct Node{
int id,et;
};
queue<Node>q;
int n,t[maxN],d[maxN];
int main(){
cin>>n;
for (int i=1;i<=n;i++){
cin>>d[i]>>t[i];
while (!q.empty()&&q.front().et<=d[i]) q.pop();
if (t[i]==-1){
if (q.empty()) cout<<-1<<' ';
else cout<<q.back().id<<' ';
}
else q.push({i,q.back().et+t[i]});
}
return 0;
}