传送门

事实上就是模拟

搞一个优先队列维护一下事件结构体:时间,人的编号,入队还是出队

再维护两个 $set$ ,队列内的人 $inQueue$ ,想要进入队列内的人 $want$

然后模拟模拟模拟!

初始把所有入队事件塞到优先队列,顺便维护一下当前最后一个取完水的时刻

每次取出优先队列里面时间最小的,时间相同优先取入队的,同时间都入队优先取编号小的

然后如果是入队,那么看看当前队列内编号最小的比较一下编号,然后根据比较结果看看是直接入队还是先塞到 $want$ 里面

如果是出队,直接更新一下答案和队列,然后看看 $want$ 里面有没有人能入队

然后就做完了

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
#include<set>
using namespace std;
typedef long long ll;
inline int read()
{
int x=,f=; char ch=getchar();
while(ch<''||ch>'') { if(ch=='-') f=-; ch=getchar(); }
while(ch>=''&&ch<='') { x=(x<<)+(x<<)+(ch^); ch=getchar(); }
return x*f;
}
const int N=2e5+;
int n,P;
ll ans[N];
struct dat {
ll tim; int id; bool flag;
dat (ll _tim=,int _id=,bool _flag=) { tim=_tim,id=_id,flag=_flag; }
inline bool operator < (const dat &tmp) const {
if(tim!=tmp.tim) return tim>tmp.tim;
return flag!=tmp.flag ? flag>tmp.flag : id>tmp.id;
}
}D[N];
priority_queue <dat> Q;
set <int> inQ,wnt;
int main()
{
n=read(),P=read();
for(int i=;i<=n;i++) D[i]=dat(read(),i,);
for(int i=;i<=n;i++) Q.push(D[i]);
ll las=;
while(!Q.empty())
{
dat t=Q.top(); Q.pop();
if(!t.flag)
{
if(inQ.empty()||*inQ.begin()>t.id)
{
las=max(las,t.tim),Q.push(dat(las+P,t.id,));
inQ.insert(t.id); las+=P;
}
else wnt.insert(t.id);
continue;
}
ans[t.id]=t.tim; inQ.erase(t.id);
if(!wnt.empty() && (inQ.empty()||*inQ.begin()>*wnt.begin()))
{
auto p=wnt.begin(); inQ.insert(*p);
Q.push(dat(las+P,*p,)); las+=P; wnt.erase(p);
}
}
for(int i=;i<=n;i++) printf("%lld ",ans[i]); puts("");
return ;
}

Codeforces 1239C. Queue in the Train的更多相关文章

  1. Codeforces Round #594 (Div. 1) C. Queue in the Train 模拟

    C. Queue in the Train There are

  2. codeforces D. Queue 找规律+递推

    题目链接: http://codeforces.com/problemset/problem/353/D?mobile=true H. Queue time limit per test 1 seco ...

  3. Codeforces Beta Round #8 A. Train and Peter KMP

    A. Train and Peter 题目连接: http://www.codeforces.com/contest/8/problem/A Description Peter likes to tr ...

  4. Serega and Fun Codeforces - 455D || queue

    https://codeforces.com/problemset/problem/455/D 其实方法很多,然而当初一个也想不到... 1.分块,块内用链表维护 修改[l,r]就当成删除第r个元素, ...

  5. CodeForces 91B Queue (线段树,区间最值)

    http://codeforces.com/problemset/problem/91/B B. Queue time limit per test: 2 seconds memory limit p ...

  6. codeforces 490B.Queue 解题报告

    题目链接:http://codeforces.com/problemset/problem/490/B 题目意思:给出每个人 i 站在他前面的人的编号 ai 和后面的人的编号 bi.注意,排在第一个位 ...

  7. Codeforces 353D Queue(构造法)

    [题目链接] http://codeforces.com/contest/353/problem/D [题目大意] 10^6个男女排队,每一秒,如果男生在女生前面,即pos[i]是男生,pos[i+1 ...

  8. Codeforces 490B Queue【模拟】

    题意还是很好理解的,根据题目给出描述条件然后求出这串QUEUE 我的做法就是用两个数组 before[] 和 after[] 表示 ai 前面的前面的人的学号 和 ai 后面的后面的人的学号 ex[] ...

  9. CodeForces 91B Queue

    题目链接:http://codeforces.com/contest/91/problem/B 题目大意: 有n头大象排队买票,第i头大象的年龄为ai,如果有比他年轻的大象排在他前面,这头大象就会非常 ...

随机推荐

  1. Namenode服务挂

    BUG修复:HDFS-13112 这两天排查了小集群Crash的问题,这里先总结下这两天排查的结果 一.查看日志 首先查看了Namenode Crash的时候的日志 (一)以下是patch hdfs- ...

  2. 2018-2019-2 20175227张雪莹《Java程序设计》实验四 《Android程序设计》

    2018-2019-2 20175227张雪莹<Java程序设计> 实验四 <Android程序设计> 实验报告封面 课程:Java程序设计 班级:1752班 姓名:张雪莹 学 ...

  3. Java第00周作业

    ---恢复内容开始--- 1.你对专业的认识和期望是什么? 徐老师说过,C语言是很多语言的基础,学好C语言,将来接触的不论是面向对象还是面向过程的语言都能沉下心,能轻松解决面临的问题,处理棘手的麻烦, ...

  4. FFmpeg之avformat_alloc_context()

    1. avformat_alloc_context /** * Allocate an AVFormatContext. * avformat_free_context() can be used t ...

  5. Redis 的配置

    Redis 的配置文件位于 Redis 安装目录下,文件名为 redis.conf. 你可以通过 CONFIG 命令查看或设置配置项. 语法 Redis CONFIG 命令格式如下: redis 12 ...

  6. 10分钟梳理MySQL核心知识点

    数据库的使用,是开发人员的基本功,对它掌握越清晰越深入,你能做的事情就越多. 做业务,要懂基本的SQL语句:做性能优化,要懂索引,懂引擎:做分库分表,要懂主从,懂读写分离... 今天我们用10分钟,重 ...

  7. Android判断view在屏幕可见

    /** * 判断当前view是否在屏幕可见 */public static boolean getLocalVisibleRect(Context context, View view, int of ...

  8. lsnrctl: .... cannot restore segment prot after reloc: Permission denied

    cannot restore segment prot after reloc: Permission denied Table of Contents 1. 错误信息 2. 解决方法 1 错误信息 ...

  9. js复选框实现全选、全不选、反选

    复选框为checkbox对象 通过input就可以将一个简单的复选框呈现在页面上 <input type="checkbox" /> 要实现的大概就是这样一个页面 思路 ...

  10. Java Unsigned Bytes

    Having had to use unsigned bytes for the first time, I also had to learn how Java references these d ...