CSUSTOJ-1002-天气变化

题目:

CSUSTOJ-1002-天气变化_第1张图片

题解:这是一个从当前位置找距离最近的大于它的元素,气温预测是一个从当前位置找距离最远的大于它的元素,后者用单调递增栈记录之后还需要lower_bound查找,这一个也是记录一个从栈底到栈顶,单调递减的栈,经过删除之后栈顶元素大于当前元素,那么就是当前位置的最近的大值

代码:

#include
#define N 1000005
using namespace std;
stacks;
int n;
int a[N],ans[N];
int main()
{
	while(~scanf("%d",&n))
	{
		while(!s.empty())s.pop();
		for(int i=1;i<=n;i++)scanf("%d",&a[i]);
		for(int i=n;i>=1;i--)
		{
			while(!s.empty()&&a[i]>=a[s.top()])s.pop();
			if(s.empty())
			{
				ans[i]=0;
				s.push(i);
			}
			else
			{
				ans[i]=s.top()-i;
				s.push(i);
			}
		}
		for(int i=1;i<=n;i++)
			printf("%d%c",ans[i],i==n?'\n':' ');
	}
	return 0;
}

 

你可能感兴趣的:(ACM_刷题,ACM_单调栈)