AT_donuts_2015_3 题解

发布时间 2023-08-25 21:22:19作者: osfly

根据题意,发现我们要维护一个身高递减的序列。

因此,我们可以直接使用单调栈维护第 \(i\) 个人能看到的人数即可。

答案就是当前栈内的元素数量。

注意应先输出答案再将当前高度入栈。

#include<cstdio>
int n;
int h[100010];
int st[100010];
int top;
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&h[i]);
		printf("%d\n",top);
		while(top>0&&st[top]<h[i]) top--;
		st[++top]=h[i];
	}
	return 0;
}