题目描述

给你一个长度为 $n$ 的序列和一个空的双端队列,每次进行3种操作种的一种:

1.将序列中编号最小的数加入到双端队列的队尾;
2.从双端队列的队尾取出一个数;
3.从双端队列的队头取出一个数。

不断进行操作直至无法进行为止。

要求最后依次取出的数构成的序列的字典序最小。求这个字典序最小的序列。

$n\le 10^5$ ,保证序列中的数互不相同。


题解

贪心

题目描述这么多,其实是一道水题 = =

由于要求字典序最小,因此每次贪心使得当前位置的数尽可能小。

那么考虑下一次弹队列的数的位置,只有三种可能:队头、队尾、序列中。

因此取出 队头的数、队尾的数、序列中的最小数 ,以最小的一个作为答案。如果在队列里则直接弹出;否则将序列中的数不断加到队列中直至加到最小数,然后弹出。

时间复杂度为排序的 $O(n\log n)$

#include <cstdio>
#include <algorithm>
#define N 100010
using namespace std;
int a[N] , mp[N] , q[N];
int main()
{
int T;
scanf("%d" , &T);
while(T -- )
{
int n , i , j , p = 1 , l = 1 , r = 0 , x , y , z;
scanf("%d" , &n);
for(i = 1 ; i <= n ; i ++ ) scanf("%d" , &a[i]);
a[n + 1] = 1 << 30 , mp[n + 1] = n + 1;
for(i = n ; i ; i -- )
{
if(a[i] < a[mp[i + 1]]) mp[i] = i;
else mp[i] = mp[i + 1];
}
for(i = 1 ; i <= n ; i ++ )
{
x = a[mp[p]];
if(l <= r) y = a[q[r]] , z = a[q[l]];
else y = z = 1 << 30;
if(x < y && x < z)
{
for(j = p ; j <= mp[p] ; j ++ ) q[++r] = j;
printf("%d " , a[q[r -- ]]) , p = j;
}
else if(y < x && y < z) printf("%d " , a[q[r -- ]]);
else printf("%d " , a[q[l ++ ]]);
}
puts("");
}
return 0;
}

【uoj#174】新年的破栈 贪心的更多相关文章

  1. [UOJ#351]新年的叶子

    [UOJ#351]新年的叶子 试题描述 躲过了AlphaGo 之后,你躲在 SingleDog 的长毛里,和它们一起来到了AlphaGo 的家.此时你们才突然发现,AlphaGo 的家居然是一个隐藏在 ...

  2. uoj#67. 新年的毒瘤(割顶)

    #67. 新年的毒瘤 辞旧迎新之际,喜羊羊正在打理羊村的绿化带,然后他发现了一棵长着毒瘤的树. 这个长着毒瘤的树可以用n个结点m 条无向边的无向图表示.这个图中有一些结点被称作是毒瘤结点,即删掉这个结 ...

  3. CF #401 (Div. 2) E. Hanoi Factory (栈+贪心)

    题意:给你一堆汉诺塔的盘子,设内半径为a,设外半径为b,高度为h,如果bj ≤ bi 同时bj > ai 我们就认为i盘子能落在在j盘子上,问你最高能落多高 思路:一看题意我们就能想到贪心,首先 ...

  4. D、CSL 的字符串 【栈+贪心】 (“新智认知”杯上海高校程序设计竞赛暨第十七届上海大学程序设计春季联赛)

    题目传送门:https://ac.nowcoder.com/acm/contest/551#question 题目描述 CSL 以前不会字符串算法,经过一年的训练,他还是不会……于是他打算向你求助. ...

  5. uoj 67 新年的毒瘤 tarjan求割点

    #67. 新年的毒瘤 Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://uoj.ac/problem/67 Description 辞旧迎新之际 ...

  6. uoj 66 新年的巧克力棒 数学

    #66. 新年的巧克力棒 Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://uoj.ac/problem/66 Description 马上就要 ...

  7. 【TOJ 4493】Remove Digits(单调栈贪心)

    描述 Given an N-digit number, you should remove K digits and make the new integer as large as possible ...

  8. UOJ#67. 新年的毒瘤

    传送门 练习一下Tarjan的模板. 求一下割点,然后加个约束条件判一下特殊点,剩下的就是所求点. //UOJ 67 //by Cydiater //2016.10.27 #include <i ...

  9. uoj 67 新年的毒瘤 割点

    题目链接: 题目 #67. 新年的毒瘤 问题描述 辞旧迎新之际,喜羊羊正在打理羊村的绿化带,然后他发现了一棵长着毒瘤的树. 这个长着毒瘤的树可以用 nn 个结点 mm 条无向边的无向图表示.这个图中有 ...

随机推荐

  1. vim 查找

    一.用/和?的区别:/后跟查找的字符串.vim会显示文本中第一个出现的字符串.?后跟查找的字符串.vim会显示文本中最后一个出现的字符串.二.注意事项:不管用/还是?查找到第一个字符串后,按回车,vi ...

  2. 1135: [POI2009]Lyz

    1135: [POI2009]Lyz https://lydsy.com/JudgeOnline/problem.php?id=1135 分析: hall定理+线段树连续区间的最大的和. 首先转化为二 ...

  3. 九、Django之ORM

    一.ORM概述 用于实现面向对象编程语言里不同类型系统的数据之间的转换,换言之,就是用面向对象的方式去操作数据库的创建表以及增删改查等操作. 到目前为止,当我们的程序涉及到数据库相关操作时,一般操作流 ...

  4. Linux 安装FastDFS<单机版>(使用Mac远程访问)

    阅读本文需要先阅读安装FastDFS<准备> 一 编译环境 yum install gcc-c++ yum -y install libevent yum install -y pcre ...

  5. java基础学习总结--开篇

    春去秋来,转眼间,参加工作快2年了.本来应该是3年,然在毕业的第一年,有试着从事过其他行业.最终结果是失败了.2016年又回来从事软件开发,转眼即将2年,在这期间有许多收获,当然也有彷徨迷茫的时候,人 ...

  6. [朴孝敏][Gold]

    歌词来源:http://music.163.com/#/song?id=406924220 作曲 : Ryan S. Jhun/David Quinones/Edwin Menjivar/Mateo ...

  7. IT视频课程集(包含各类Oracle、DB2、Linux、Mysql、Nosql、Hadoop、BI、云计算、编程开发、网络、大数据、虚拟化

    马哥Linux培训视频课程:http://pan.baidu.com/s/1pJwk7dp Oracle.大数据系列课程:http://pan.baidu.com/s/1bnng3yZ 天善智能BI培 ...

  8. PHP autoload与spl_autoload自动加载机制的深入理解

    PHP autoload与spl_autoload自动加载机制的深入理解 作者: 字体:[增加 减小] 类型:转载 时间:2013-06-05我要评论 本篇文章是对PHP中的autoload与spl_ ...

  9. C# 钱数 小写 转 大写

    public class Rmb { /// <summary> /// 转换人民币大小金额 /// </summary> /// <param name="n ...

  10. PSP1130

    PSP时间图: 类型 任务 开始时间 结束时间 净时间 中断时间 日期 开会 开会 16:17 16:50 33 0 20171027 开会 开会 17:00 17:22 22 0 20171028 ...