Luogu P1750 【出栈序列】
一眼(万年)贪心
minn设小调不出来祭
首先要保证更靠前的输出更小
那么容易想到,对于之后可能入栈的元素(即栈的剩余空间仍能装下的所有元素),我们可以取其中的最小值minn,和栈顶元素$top$比较
,如果minn<top我们将minn及之前的所有元素入栈,然后输出minn并且让它出栈,当然可以直接输出不入栈,这是次要的,
否则一直弹出栈顶直到栈空或top>minn
#include<iostream>
#include<cstdio>
#include<stack>
using namespace std;
const int maxn=;
int n,c,a[maxn],rest,pos;
stack<int>st;
int main()
{
scanf("%d%d",&n,&c);
for(int i=;i<=n;i++)
scanf("%d",&a[i]);
rest=c,pos=; //rest表示剩余可用栈空间,pos表示第一个未处理元素的位置
while(pos!=n+) //元素没有全被处理
{
int minn=2e9,r; //minn记录可能入栈的最小元素值,r记录它的位置
for(int i=pos;i<=min(pos+rest-,n);i++)
if(a[i]<minn)
minn=a[i],r=i;
while(!st.empty()&&minn>=st.top()) //如果最小元素一直比栈顶元素大,就一直出栈
{
printf("%d ",st.top());
st.pop(),rest++; //可用栈空间加一
if(pos+rest-<=n&&a[pos+rest-]<minn) //栈空间的改变使得我们可以比较下一位置
minn=a[pos+rest-],r=pos+rest-;
}
if(st.empty()||minn<st.top()) //栈为空或最小值小于栈顶元素值,就将最小元素前的元素全部入栈
{
for(int i=pos;i<r;i++)
st.push(a[i]);
printf("%d ",a[r]);
rest-=r-pos,pos=r+; //空间减小,未处理元素位置改变
}
}
while(!st.empty())
{
printf("%d ",st.top());
st.pop();
}
printf("\n");
return ;
}
Luogu P1750 【出栈序列】的更多相关文章
- P1750 出栈序列
这好像是普及难度的吧~ 感觉再次被小学生吊打了........ \(\color{Red}{----------------------=|(●'◡'●)|=我是手动的分割线------------- ...
- PAT线性结构_一元多项式求导、按给定步长反转链表、出栈序列存在性判断
02-线性结构1. 一元多项式求导 (25) 设计函数求一元多项式的导数.(注:xn(n为整数)的一阶导数为n*xn-1.) 输入格式:以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过100 ...
- Catalan数 && 【NOIP2003】出栈序列统计
令h(1)=1, h(0)=1,catalan数满足递归式: h(n)=h(0)*h(n-1)+h(1)*h(n-2)+...+h(n-1)h(0) (n>=2) =C(2n, n)/(n+1) ...
- 【转】【数据结构】【有n个元素依次进栈,则出栈序列有多少种】
卡特兰数 大神解释:https://blog.csdn.net/akenseren/article/details/82149145 权侵删 原题 有一个容量足够大的栈,n个元素以一定的顺序 ...
- 【剑指offer】判断出栈序列是否合法
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应 ...
- pat--7-11 出栈序列的合法性(25 分)
7-11 出栈序列的合法性(25 分) 给定一个最大容量为 M 的堆栈,将 N 个数字按 1, 2, 3, ..., N 的顺序入栈,允许按任何顺序出栈,则哪些数字序列是不可能得到的?例如给定 M=5 ...
- POJ1363 Rails 验证出栈序列问题
题目地址: http://poj.org/problem?id=1363 此题只需验证是否为合法的出栈序列. 有两个思路: 1.每个已出栈之后的数且小于此数的数都必须按降序排列.复杂度O(n^2),适 ...
- vijos - P1122出栈序列统计 (卡特兰数)
P1122出栈序列统计 未递交 标签:NOIP普及组2003[显示标签] 描写叙述 栈是经常使用的一种数据结构,有n令元素在栈顶端一側等待进栈,栈顶端还有一側是出栈序列. 你已经知道栈的操作有两·种: ...
- 一个栈的入栈序列为ABCDEF,则不可能的出栈序列是
技术之瞳 阿里巴巴技术笔试心得习题2.65: 一个栈的入栈序列为ABCDEF,则不可能的出栈序列是(D) A.DEFCBA B.DCEFBA C.FEDCBA D.FECDBA E.ABCDEF ...
- 【NOJ2024】入栈序列和出栈序列
入栈序列和出栈序列 时间限制(普通/Java):1000MS/3000MS 运行内存限制:65536KByte 总提交:293 测试通过:68 比赛描述 给出入栈序列 ...
随机推荐
- 解题:CQOI 2017 老C的方块
题面 看起来很像网络流的二分图套路题,然后我们大力观察(题目定义的相邻我用引号括起来,应该能看懂) 发现“相邻”的一对方格如果各自连着一个一个方格就gg了,于是对于所有这些“相邻”的方格,我们有两种选 ...
- 【数学】【P5150】 生日礼物
Description 给定 \(n\),求 \[\sum_{i}~\sum_j~[lcm(i,j)~=~n]\] input 一行一个整数代表 \(n\) Output 一行一个整数代表答案 Hin ...
- joda-time 2.5 包简化java时间操作
原文:https://www.ibm.com/developerworks/cn/java/j-jodatime.html Joda-Time 简介 既然无法摆脱时间,为何不设法简化时间处理? J P ...
- ORB原理与源码解析
转载: http://blog.csdn.net/luoshixian099/article/details/48523267 CSDN-勿在浮沙筑高台 没有时间重新复制代码,只能一股脑的复制,所以代 ...
- hdu 6311 欧拉回路
题意:求一个图(不一定联通)最小额外连接几条边,使得可以一笔画出来 大致做法 1.找出联通块 2.统计每一个连通块里面度数为奇数的点的个数, 有一个性质 一个图能够用一笔画出来,奇数点的个数不超过2个 ...
- python 调用aiohttp
1. aiohttp安装 pip3 install aiohttp 1.1. 基本请求用法 async with aiohttp.get('https://github.com') as r: a ...
- python基础-异常(exception)处理
python基础-异常(exception)处理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 程序中难免出现错误,而错误分成两种,即语法错误和逻辑错误.语法错误根本过不了pyth ...
- poj 1961 Period
Period http://poj.org/problem?id=1961 Time Limit: 3000MS Memory Limit: 30000K Description Fo ...
- Elasticsearch技术解析与实战(五)Document解析
1.手动指定document id 一般来说,是从某些其他的系统中,导入一些数据到es时,会采取这种方式,就是使用系统中已有数据的唯一标识,作为es中document的id. PUT /index/t ...
- iframe中的历史记录问题汇总及解决方案[转]
在做页面统计的时候遇到了两个问题: 1.包含iframe的页面,在IE下按后退按钮不能刷新主页面.隐藏Iframe的src是统计程序的url,每点一次后退,就会发出一次页面加载时间请求. 2.由js动 ...