poj3250单调栈

有n只羊,(姑且算是羊吧,也有可能是牛啊猫啊什么之类的),每只羊都有一个身高,前面的羊要看到后面的羊的条件是,后面的羊高度要小于前面的羊,就问各位羊加起来看到的牛多少只.......

 

#include<iostream>
#include<stack>
#include<stdio.h>
using namespace std;
int main()
{
	int n;
	while(scanf("%d",&n)>0)
	{
		stack<__int64>Q;
		__int64 num,sum=0;
		scanf("%I64d",&num);
		Q.push(num);
		for(int i=1;i<n;i++)
		{
			scanf("%I64d",&num);
			while(!Q.empty()&&Q.top()<=num)
			Q.pop();
			sum+=Q.size();
			Q.push(num);
		}
		printf("%I64d\n",sum);
	}
	return 0;
}

 

 

 

posted @ 2013-06-23 21:31  紫忆  阅读(269)  评论(0编辑  收藏  举报