您的位置:首页 > 其它

cf 547B 单调栈

2015-06-03 16:10 417 查看
#include <iostream>

#include<stdio.h>

#include<string.h>

#include<algorithm>

using namespace std;

const int maxn=2e5+10;

int lst[maxn],nxt[maxn];

int a[maxn],s[maxn];

int n;

int tp;

int ans[maxn];

void getPos(int i)

{

lst[i]=i;nxt[i]=n;

while(tp!=0 && a[s[tp-1]]>=a[i])//tp初值为0,注意是>=

nxt[s[--tp]]=i-1;

s[tp++]=i;

if(tp==1) lst[i]=1;

else lst[i]=s[tp-2]+1;

}

int main()

{

tp=0;

cin>>n;

for(int i=1;i<=n;i++)

{

scanf("%d",&a[i]);

getPos(i);//边输入边插入

}

for(int i=1;i<=n;i++)

{

int len=nxt[i]-lst[i]+1;

ans[len]=max(ans[len],a[i]);

}

for(int i=n-1;i>0;i--)

{

ans[i]=max(ans[i],ans[i+1]);

}

for(int i=1;i<=n;i++)

printf("%d ",ans[i]);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: