[WOJ1583]向右看齐
Posted kma093
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[WOJ1583]向右看齐相关的知识,希望对你有一定的参考价值。
题目链接:
题目分析:
大水题……我就来水个题解
倒序扫,单调栈维护单减序列,每个对象的答案是栈里它下面那个元素
代码:
#include<bits/stdc++.h>
#define MAXN (1000000+5)
using namespace std;
inline int read(){
int cnt=0,f=1;char c;
c=getchar();
while(!isdigit(c)){
if(c==‘-‘)f=-f;
c=getchar();
}
while(isdigit(c)){
cnt=cnt*10+c-‘0‘;
c=getchar();
}
return cnt*f;
}
int n,sta[MAXN],a[MAXN],top=0;
int ans[MAXN];
int main(){
n=read();
for(register int i=1;i<=n;i++)a[i]=read();
for(register int i=n;i>=1;--i){
while(a[sta[top]]<=a[i]&&top)top--;
sta[++top]=i;
if(top==0)ans[i]=0;
else
ans[i]=sta[top-1];
}
for(register int i=1;i<=n;i++)printf("%d
",ans[i]);
return 0;
}
以上是关于[WOJ1583]向右看齐的主要内容,如果未能解决你的问题,请参考以下文章
[USACO09MAR]向右看齐Look Up(单调队列在线处理)
单调队列————[USACO09MAR]向右看齐Look Up