题目描述

给你一个长度为 $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. CH03 课下作业

    CH03 课下作业 缓冲区溢出漏洞实验 缓冲区溢出攻击:通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,造成程序崩溃或使程序转而执行其它指令,以达到攻击的目的. 缓冲区溢出 ...

  2. day 12 列表字典 补充

    1.列表list的遍历 ##### while遍历 需要len(list) list = [11,22,33,44,55] len_list = len(list) i = 0 while i< ...

  3. 【LOJ6433】【PKUSC2018】最大前缀和

    [LOJ6433][PKUSC2018]最大前缀和 题面 题目描述 小 C 是一个算法竞赛爱好者,有一天小 C 遇到了一个非常难的问题:求一个序列的最大子段和. 但是小 C 并不会做这个题,于是小 C ...

  4. selenium,unittest——下拉菜单操作,百度账号设置修改

    #encoding=utf-8from selenium import webdriverimport time,unittest, re,sysfrom HTMLTestRunner import ...

  5. Scrapy爬豆瓣电影Top250并存入MySQL数据库

    d:进入D盘 scrapy startproject douban创建豆瓣项目 cd douban进入项目 scrapy genspider douban_spider movie.douban.co ...

  6. 安装文件报错error while loading shared libraries: libssl.so.6

    http://www.openssl.org/source/  这里下载http://www.openssl.org/source/openssl-1.0.0r.tar.gz 安装命令为:tar -z ...

  7. HPUX修改disk实例号--11.31only

    有时由于一些原因或者用户的要求,需要修改Disk的实例号,这里简单介绍如何手工进行修改. 在修改之前需要做一些准备工作,即先将stale状态的设备文件清理掉,具体步骤如下: 使用ioscan命令列出s ...

  8. Mysql 单表主从同步

    先配主从同步,后将主库表老数据传输到从库 说明:api-server的数据库为主,其他harbor为从 1.master 配置文件更改 [mysqld] log-bin = mysql-bin ser ...

  9. Python数据挖掘——数据预处理

    Python数据挖掘——数据预处理 数据预处理 数据质量 准确性.完整性.一致性.时效性.可信性.可解释性 数据预处理的主要任务 数据清理 数据集成 数据归约 维归约 数值归约 数据变换 规范化 数据 ...

  10. 17 Tips For Writing An Excellent Email Subject Line

    Out of the billions of emails that are sent every day, how can you make sure that yours stands out? ...