input:stack.in output:stack.out
时间限制: 1000 ms 空间限制: 524288 KB 具体限制
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 }