input:stack.in output:stack.out
时间限制:
1000 ms 空间限制: 524288 KB 具体限制
题目描述
![](https://i-blog.csdnimg.cn/blog_migrate/fcfd7bbcee94a05915e93275d96f1dd1.png)
输入
![](https://i-blog.csdnimg.cn/blog_migrate/b67639c7996458715c276f3aa0a01e23.png)
输出
![](https://i-blog.csdnimg.cn/blog_migrate/587a5e39dcb73a4ad31f0de0d1021cb1.png)
样例输入
5 1 4 3 5 2
样例输出
1 2 4 3 5
数据范围限制
![](https://i-blog.csdnimg.cn/blog_migrate/854befe0a043a71dfc1ee03c7146c637.png)
提示
依次使用操作 1、2、1、1、1、1、2、3、3、2 可以得到样例输出 1 2 4 3 5 。
1 #include<bits/stdc++.h> 2 using namespace std; 3 int main() 4 { 5 freopen("stack.in","r",stdin); 6 freopen("stack.out","w",stdout); 7 int n,a[110000],rm[110000],q[110000],l=1,r=0; 8 scanf("%d",&n); 9 rm[n+1]=100010; 10 for(int i=1;i<=n;++i) 11 scanf("%d",&a[i]); 12 for(int i=n;i;--i) 13 rm[i]=min(rm[i+1],a[i]); 14 for(int i=1;i<=n;++i){ 15 if(l<=r){ 16 if(a[q[l]]>rm[i]&&a[q[r]]>rm[i]){ 17 q[++r]=i; 18 continue; 19 } 20 while(!(a[q[l]]>rm[i]&&a[q[r]]>rm[i])&&l<=r) 21 if(a[q[l]]<a[q[r]]) 22 printf("%d ",a[q[l++]]); 23 else 24 printf("%d ",a[q[r--]]);q[++r]=i; 25 }else{ 26 q[++r]=i; 27 } 28 } 29 while(l<=r) 30 if(a[q[l]]<a[q[r]]) 31 printf("%d ",a[q[l++]]); 32 else 33 printf("%d ",a[q[r--]]); 34 }