最大序列 seq.cpp
阿新 • • 發佈:2018-12-19
【一句話題意】給定入隊序列,求字典序最大的出隊序列。
【分析】顯然,這是一道模擬題;顯然,滿足字典序最大,貪心即可。 然後噴一下出題人,沒有設定的點,亂搞也可以輕鬆卡過。
【code】
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=2e5+100;
int n,a[maxn],mx[maxn];
int s[maxn],top;
inline void read(int &x){
x=0;int fl=1;char tmp=getchar();
while(tmp<'0'||tmp>'9') {if(tmp=='-')fl=-fl;tmp=getchar();}
while(tmp>='0'&&tmp<='9') x=(x<<1)+(x<<3)+tmp-'0',tmp=getchar();
x=x*fl;
}
int main(){
freopen("seq.in","r" ,stdin);
freopen("seq.out","w",stdout);
cin>>n;
for(int i=1;i<=n;i++) read(a[i]);
for(int i=n;i>=1;i--) mx[i]=max(mx[i+1],a[i]);
for(int i=1;i<=n;i++){
if(!top) s[++top]=a[i];
else{
while(top>0&&s[top]>mx[i])printf("%d ",s[top--]);
s[++top]=a[i];
}
}
while (top>0) printf("%d ",s[top--]);
return 0;
}