其实是个模拟题。。

/*
每个人都有一个口渴时间,如果口渴时,其前面没有人在排队,那么其就去排队接水,反之一直等到前面没有人排队
问每个人接完水的时间
每个没轮到的人都在位置上等前面的人接完水,然后他再去排队
先把每个人按照口渴时间排序
设新加入队列的人是now,那么口渴时间在 now.s->now.t 之间的所有人都会进入等待状态
在now前面的人会直接去排队,在now后面的人会继续等待
当这条队列都排完后,那些等待状态中的,最靠前的人会去排队 依次类推,用队列维护排队的人,用优先队列维护等待的人 */
#include<bits/stdc++.h>
#include<queue>
using namespace std;
#define N 100005
#define ll long long
#define INF 0x3f3f3f3f3f3f3f3f ll n,ans[N],P;
struct Node{
ll s,id;
bool operator<(Node b)const {
return id>b.id;
}
}p[N];
int cmp(Node a,Node b){
if(a.s==b.s)return a.id<b.id;
return a.s<b.s;
}
int main(){
cin>>n>>P;
for(int i=;i<=n;i++){
cin>>p[i].s;
p[i].id=i;
}
sort(p+,p++n,cmp); queue<Node>q;
priority_queue<Node>pq;
int index=,finish=; pq.push(p[]);
ll time=p[].s;
while(){
Node cur;
if(pq.size()){
cur=pq.top();
pq.pop();
}
else {
cur=p[++index];
time=p[index].s;//时间直接跳过去
}
q.push(cur); while(index+<=n){
Node tmp=q.back();
if(p[index+].s<=time+1ll*q.size()*P){
//放到pq里
if(p[index+].id>tmp.id)
pq.push(p[++index]);
//放到q里
else q.push(p[++index]);
}
else break;
} //q队列的的都可以出队了
while(q.size()){
Node tmp=q.front();q.pop();
time+=P;
ans[tmp.id]=time;
finish++;
}
if(finish==n)break;
} for(int i=;i<=n;i++)
cout<<ans[i]<<' ';
}

最新文章

  1. HTTP Code
  2. 转!!mybatis在xml文件中处理大于号小于号的方法
  3. FileZilla FTP Server 高级防火墙例外
  4. 剑指offer系列56---连续子数组的最大和
  5. Windows组策略同步问题
  6. Communications link failure的解决办法
  7. Spring4整合Hibernate4
  8. Spring Web 配置文件加载路径问题
  9. react-native简单demo:实现加载豆瓣电影列表
  10. 分布式缓存GemFire架构介绍
  11. RabbitMQ 任务分发机制
  12. LabVIEW---vi图标和符号的制作
  13. 信息摘要算法之五:HMAC算法分析与实现
  14. Stm32基础
  15. 第一次怎么把本地git仓库的内容push到远程仓库?
  16. 【转】IPV6的地址类型
  17. QoS 服务质量
  18. 学习protobuf 感想
  19. WebDriver高级应用实例(7)
  20. c++拷贝构造函数(深拷贝、浅拷贝)——转

热门文章

  1. 【leetcode】976. Largest Perimeter Triangle
  2. Ubuntu更新完NVIDIA驱动后,重启电脑进入不了系统,一直处于登录界面
  3. SCP-bzoj-4734
  4. sql 基础语法3:分组,聚合函数,having,联合查询,快速备份,内联函数
  5. Node.js环境下通过Express创建Web项目
  6. Vue.config.optionMergeStrategies 用法分析
  7. js事件冒泡、事件捕获
  8. 用iptables实现代理上网
  9. upc组队赛12 Janitor Troubles【求最大四边形面积】
  10. testNG官方文档翻译-5 测试方法,测试类和测试组