1. 程式人生 > >最大序列 seq.cpp

最大序列 seq.cpp

【一句話題意】給定入隊序列,求字典序最大的出隊序列。

【分析】顯然,這是一道模擬題;顯然,滿足字典序最大,貪心即可。 然後噴一下出題人,沒有設定Θ(n)\Theta(n)的點,Θ(nlog2n)STL\Theta(nlog_2n)*STL亂搞也可以輕鬆卡過。

【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; }