牛客练习赛10 B栈和排序【思维】
题目描述
给你一个1->n的排列和一个栈,入栈顺序给定
你要在不打乱入栈顺序的情况下,对数组进行从大到小排序
当无法完全排序时,请输出字典序最大的出栈序列
输入描述:
第一行一个数n
第二行n个数,表示入栈的顺序,用空格隔开,结尾无空格
输出描述:
输出一行n个数表示答案,用空格隔开,结尾无空格
示例1
输入
5
2 1 5 3 4
输出
5 4 3 1 2
说明
2入栈;1入栈;5入栈;5出栈;3入栈;4入栈;4出栈;3出栈;1出栈;2出栈
备注:
对于100%的数据,有1<=n<=1000000,保证给的是一个排列
题意: 略
分析: 我们可以模拟下找到规律,因为输出字典序最大的,第一个输出的肯定是最大的元素,当考虑第i个元素时,如果当前元素是 [a[i],n] [a[i],n],中最大的元素,那么就输出,否则就入栈,如果输出后,考虑栈顶元素,同上,扫一遍之后如果栈中还有元素,那么就直接输出即可
参考代码
#include<bits/stdc++.h>using namespace std;stack<int> s;
vector<int> res;
int a[N],pre[N];int main(){ios_base::sync_with_stdio(0);int t = -1;int n;cin>>n;for(int i = 0;i < n;i++) cin>>a[i];for(int i = n-1;i >= 0;i--) {t = max(t,a[i]);pre[i] = t;}for(int i = 0;i < n;i++) {if(a[i] == pre[i]) {res.push_back(a[i]);while (!s.empty() && s.top() > pre[i+1]) {res.push_back(s.top());s.pop();}} else {s.push(a[i]);}}while (!s.empty()) {res.push_back(s.top());s.pop();}for(int i = 0;i < res.size();i++) {printf("%d%c",res[i],i == res.size() - 1 ? '\n' : ' ');}return 0;
}
- 如有错误或遗漏,请私聊下UP,thx
牛客练习赛10 B栈和排序【思维】相关推荐
- 牛客练习赛10 F-序列查询(莫队+链表)
F-序列查询 v5zsq题解 假设数字xxx在区间[l,r]种出现y次,那么包含x的子区间个数为2r−l+1−y⋅(2y−1)2^{r-l+1-y}·(2^y-1)2r−l+1−y⋅(2y−1),因此 ...
- 牛客练习赛41 D.最小相似度(思维+bfs)
传送门 给定nnn个长mmm位的二进制串 求一个二进制串TTT,定义valival_ivali是TTT与第iii个二进制串相同的位数 使得max(val1,val2....valn)max(val_ ...
- 牛客练习赛73 D 离别(线段树+右端点排序离线查询)
牛客练习赛73 D 离别 思路: 对于每一个固定的右端点i,我们都找到一个区间(l,r)使得区间中的点为左端点时 里面最大的的种数为k. 这个可以用队列或者vector来维护. 然后我们对于q个查询, ...
- 解题报告(一)C、(牛客练习赛41 F)简单数学题(数论 + FWT)(3.5)
繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...
- 2021牛客练习赛90
2021牛客练习赛90 B.寒冬信使 C.盾与战锤 B.寒冬信使 题目链接:https://ac.nowcoder.com/acm/contest/11180/B code: #include< ...
- 牛客练习赛34 E little w and Digital Root(数位dp)
title: 牛客练习赛34 E little w and Digital Root(数位dp) date: 2018-12-17 22:38:37 tags: 数位dp categories:ACM ...
- 牛客练习赛34 - C little w and Segment Coverage(思维、树状数组)
title: 牛客练习赛34 - C little w and Segment Coverage(思维.树状数组) date: 2018-12-15 16:36:55 tags: [树状数组,思维] ...
- 牛客练习赛52 | C | [烹饪] (DP,裴蜀定理,gcd)
牛客练习赛52 C 烹饪 链接:https://ac.nowcoder.com/acm/contest/1084/C来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 327 ...
- 牛客练习赛75 D 减数游戏(队列优化(需要取模的)堆)
牛客练习赛75 D 减数游戏 思路:写一下式子可以发每次选择最小的两个数进行操作,最后得到的答案会是最大的,那我们可以将它放进一个最小堆中来维护,但是里面的数是需要取模的,当它取模的时候,将会变小.那 ...
最新文章
- Fragment提交transaction导致state loss异常
- C#调用JAVA接口WSSE方式用WebClient方式
- 全球与中国植物基液压油市场供需预测及未来发展展望报告2022-2028年版
- docker重启mysql数据丢失_mysql如何确保数据不丢失的?我们借鉴这种设计思想实现热点账户高并发
- dart系列之:dart中的异步编程
- AD 脚本kixtart运用之五(用户电脑屏保设置)
- 真实经历:整整一年了,他是这样从程序员转型做产品经理的
- P4151 [WC2011]最大XOR和路径(线性基应用)
- 在Hadoop上运行基于RMM中文分词算法的MapReduce程序
- 《App后台开发运维与架构实践》第2章 App后台基础技术
- PHP下载CSS文件中的图片
- ios获取新数据要不要关_100%安卓APP都在获取用户隐私,网络隐私进入深入区
- js系列教程2-对象、对象属性全解
- Sengled Snap带摄像头的智能灯泡
- C# json解析字符串总是多出双引号_SSM框架中JSON数据交互实现页面显示图书种类...
- 基于opencv库把图像灰度化,二值化
- 大数据处理平台简介和总结
- A053_项目部署_Linux介绍_CentOS
- asp .net 和 ASP
- 三星推出体积更小的1亿像素图像传感器产品线;66%中企没看到数字化投资促进收入增长 | 美通企业日报...