描述

HIHO银行等待区有一排N个座位,从左到右依次编号1~N。现在有M位顾客坐在座位上,其中第i位坐在编号Ai的座位上。

之后又陆续来了K位顾客,(K + M ≤ N) 他们都会选择坐在最"舒适"的空座位上,并且过程中没有顾客离开自己的座位。

最"舒适"的定义是:

1. 对于一个座位,我们将它左边连续的空座位数目记作X,它右边连续的空座位数目记作Y。

2. 顾客首先会选择min(X, Y)最大的座位。

3. 如果有多个选择,顾客会选择其中max(X, Y)最大的座位。

4. 如果还是有多个选择,顾客会选择其中编号最小的座位。

请你计算出之后来的K位顾客坐在几号座位上。

输入

第一行包含三个整数N,M和K。

第二行包含M个整数A1, A2, ... AM。

对于50%的数据,1 ≤ N ≤ 1000

对于100%的数据,1 ≤ N ≤ 100000,  1 ≤ Ai ≤ N,  K + M ≤ N

输出

输出K行,每行一个整数代表该位顾客座位的编号。

样例输入

10 2 3
1 10

样例输出

5
7
3

题意:其实就是要坐在最长的空白处的中间,如果有多个长度相同的,选择左边那个。

思路:STL单调队列保存每一段空白,以长度为第一关键字,位置为第二关键字。每次坐进来一个人,会把一段空白分成两段空白,把两个新的插入队列里。

因为说了最后依然有空位,所以不必考虑越界的情况。

#include<queue>
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=;
struct in
{
int id;int l;int r;
in(){}
in(int x,int y,int z):id(x),l(y),r(z){}
friend bool operator < (in a,in b){
if(a.r-a.l==b.r-b.l) return a.id>b.id;
return a.r-a.l<b.r-b.l;
}
};
int a[maxn],used[maxn],L[maxn],R[maxn];
priority_queue<in>q;
int main()
{
int N,M,K,i,j;
scanf("%d%d%d",&N,&M,&K);
used[]=; used[N+]=;
for(i=;i<=M;i++) scanf("%d",&a[i]);
sort(a+,a+M+);
a[]=;a[M+]=N+;
for(i=;i<=M+;i++) {
L[i]=a[i-]+; R[i]=a[i]-;
q.push(in((L[i]+R[i])/,L[i],R[i]));
}
for(i=;i<=K;i++){
in tmp=q.top(); q.pop();
printf("%d\n",tmp.id);
q.push(in((tmp.id-+tmp.l)/,tmp.l,tmp.id-));
q.push(in((tmp.r+tmp.id+)/,tmp.id+,tmp.r));
}
return ;
}

HihoCoder1705: 座位问题(STL)的更多相关文章

  1. hihocoder1705 座位问题

    思路: 使用堆模拟.复习了priority_queue自定义结构体比较函数的用法. 实现: #include <bits/stdc++.h> using namespace std; ty ...

  2. 【暴力,STL,水】UVa 1523 - Helicopter

    Since ancient time, people have been dreaming of flying in the sky. Eventually, the dream was realiz ...

  3. STL——空间配置器(构造和析构基本工具)

    以STL的运用角度而言,空间配置器是最不需要介绍的东西,它总是隐藏在一切组件(更具体地说是指容器,container)的背后,默默工作,默默付出.但若以STL的实现角度而言,第一个需要介绍的就是空间配 ...

  4. stl 题目总结

    stl 题目总结 一.圆桌问题 1 .问题: 圆桌上围坐着2n个人.其中n个人是好人,另外n个人是坏人.如果从第一个人开始数数,数到第m个人,则立即处死该人:然后从被处死的人之后开始数数,再将数到的第 ...

  5. 详细解说 STL 排序(Sort)

    0 前言: STL,为什么你必须掌握 对于程序员来说,数据结构是必修的一门课.从查找到排序,从链表到二叉树,几乎所有的算法和原理都需要理解,理解不了也要死记硬背下来.幸运的是这些理论都已经比较成熟,算 ...

  6. STL标准模板库(简介)

    标准模板库(STL,Standard Template Library)是C++标准库的重要组成部分,包含了诸多在计算机科学领域里所常见的基本数据结构和基本算法,为广大C++程序员提供了一个可扩展的应 ...

  7. STL的std::find和std::find_if

    std::find是用来查找容器元素算法,但是它只能查找容器元素为基本数据类型,如果想要查找类类型,应该使用find_if. 小例子: #include "stdafx.h" #i ...

  8. STL: unordered_map 自定义键值使用

    使用Windows下 RECT 类型做unordered_map 键值 1. Hash 函数 计算自定义类型的hash值. struct hash_RECT { size_t operator()(c ...

  9. C++ STL简述

    前言 最近要找工作,免不得要有一番笔试,今年好像突然就都流行在线笔试了,真是搞的我一塌糊涂.有的公司呢,不支持Python,Java我也不会,C有些数据结构又有些复杂,所以是时候把STL再看一遍了-不 ...

随机推荐

  1. MongoDB数据关系的表达

    虽说MongoDB是非关系型数据库,但由于大部分情况下数据之间是存在关系的,所以MongoDB也需要一些方式来表达数据之间的关系.MongoDB表达数据关系的方式有两种:文档嵌套和数据库引用. 一.文 ...

  2. 1861 奶牛的数字游戏 2006年USACO

    codevs——1861 奶牛的数字游戏 2006年USACO  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 青铜 Bronze 题解       题目描述 Descript ...

  3. Hadoop安装和基本单机部署

    下载安装  # 下载 $ cd /usr/local $ wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-2.9.2/hadoo ...

  4. Flink学习(一)

    Apache Flink是一个面向分布式数据流处理和批量数据处理的开源计算平台,它能够基于同一个Flink运行时,提供支持流处理和批处理两种类型应用的功能. 现有的开源计算方案,会把流处理和批处理作为 ...

  5. 转:libev和libevent的设计差异

    转:http://www.cnblogs.com/Lifehacker/p/whats_the_difference_between_libevent_and_libev_chinese.html [ ...

  6. Unity3d插件]EasyTouch简单使用方法

    EasyTouch使用 EasyTouch 文件夹[-] 一.效果图 二.操作步骤 1.官方文档上的步骤 2.翻译一下以上的步骤 3.依据官方的这些提示.自己来做一个属于自己的人物遥感控制 对于移动平 ...

  7. CMS - tabBar

    Tips:如果网页图片(文字)看不清,请按CTRL+鼠标滚轮 1.建议使用阿里图库 或者 easyicon 2.建议使用81*81且低于40KB的图片(建议jpg) 3.如需查看脑图结构,请点击:ta ...

  8. Java类载入器(二)——自己定义类载入器

      用户定制自己的ClassLoader能够实现以下的一些应用: 自己定义路径下查找自己定义的class类文件,或许我们须要的class文件并不总是在已经设置好的Classpath以下,那么我们必须想 ...

  9. PHP读取excel(4)

    这一小节内容主要是PHPExcel读取少量excel数据,具体代码如下: <?php //数据较少的时候,一次性读取出来放到数组里 header("Content-Type:text/ ...

  10. HDU 5344 MZL's xor (多校)[补7月28]

    MZL's xor Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total S ...