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 }