首页 > 技术文章 > [WOJ1583]向右看齐

kma093 2019-01-19 21:24 原文

题目链接:###

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\n",ans[i]);
	return 0;
}

推荐阅读