hdu 1506(单调栈实现)

#include 
#include
#include
using namespace std;
struct node{
int w=1;
long long h;
}s[100005];
int main()
{
	int n;
while(scanf("%d",&n)!=EOF&&n)
{
	int i;
	stackst;
	for(i=0;i=s[i-1].h)//维护栈的单调增
		{
			st.push(s[i]);
		}
		else
		{
			total_w=0,cur_area=0;
			while(!st.empty()&&s[i].hmaxn) maxn=cur_area;
				st.pop();//否则出栈
			}
			total_w+=s[i].w;//加上要进栈的矩形宽度
			s[i].w=total_w;//合并成新的矩形
			st.push(s[i]);
		}
	}
	total_w=0,cur_area=0;
	while(!st.empty())
	{
		total_w+=st.top().w;
		cur_area=total_w*st.top().h;
		if(cur_area>maxn) { maxn=cur_area;}
		st.pop();
	}
	printf("%lld\n",maxn);
}
	return 0;
}

你可能感兴趣的:(单调栈)