poj3250 Bad Hair Day

Description

Some of Farmer John’sNcows (1 ≤N≤ 80,000) are having a bad hair day! Since each cow is self-conscious about her messy hairstyle, FJ wants to count the number of other cows that can see the top of other cows’ heads.

Each cowihas a specified heighthi(1 ≤hi≤ 1,000,000,000) and is standing in a line of cows all facing east (to the right in our diagrams). Therefore, cowican see the tops of the heads of cows in front of her (namely cowsi+1,i+2, and so on), for as long as these cows are strictly shorter than cowi.

Consider this example:

== == – = Cows facing right –>= = == – = = == = = = = =1 2 3 4 5 6

Cow#1 can see the hairstyle of cows #2, 3, 4Cow#2 can see no cow’s hairstyleCow#3 can see the hairstyle of cow #4Cow#4 can see no cow’s hairstyleCow#5 can see the hairstyle of cow 6Cow#6 can see no cows at all!

Letcidenote the number of cows whose hairstyle is visible from cowi; please compute the sum ofc1throughcN.For this example, the desired is answer 3 + 0 + 1 + 0 + 1 + 0 = 5.

Input

Line 1: The number of cows,N.Lines 2..N+1: Linei+1 contains a single integer that is the height of cowi.

Output

Line 1: A single integer that is the sum ofc1throughcN.

Sample Input

610374122

Sample Output

5

一些牛从左到右排列,所有的牛都从左往右看,左边的牛只能看到右边的比它身高严格小的牛的发型,如果被一个大于等于它身高的牛挡住,,那么它就不能看到再右边的牛。要求每头牛可以看到其他牛的总数,转化一下,其实就是求每头牛被看到的总次数。可以用单调栈,每次删除栈中比当前牛的身高小于等于的数。

#include<iostream>#include<stdio.h>#include<stdlib.h>#include<string.h>#include<algorithm>using namespace std;#define maxn 80600int a[maxn],stack[maxn];int main(){int n,m,i,j,top;__int64 sum;while(scanf("%d",&n)!=EOF){memset(stack,0,sizeof(stack));top=0;sum=0;for(i=1;i<=n;i++){scanf("%d",&a[i]);while(top>0 && a[i]>=stack[top])top–;sum+=top;stack[++top]=a[i];}printf("%I64d\n",sum);}return 0;}

版权声明:本文为博主原创文章,未经博主允许不得转载。

只要笑一笑,没什么事请过不了

poj3250 Bad Hair Day

相关文章:

你感兴趣的文章:

标签云: