1686: Bad Hair Day
total submission: 68 test passes: 31
description
Some of Farmer John's N cows (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 cow i has a specified height hi (1 ≤ hi ≤ 1,000,000,000) and is standing in a line of cows all facing east (to the right in our diagrams). Therefore, cow i can see the tops of the heads of cows in front of her (namely cows i+1, i+2, and so on), for as long as these cows are strictly shorter than cow i.
Consider this example:
=
= =
= - = Cows facing right -->
= = =
= - = = =
= = = = = =
1 2 3 4 5 6
Cow#1 can see the hairstyle of cows #2, 3, 4
Cow#2 can see no cow's hairstyle
Cow#3 can see the hairstyle of cow #4
Cow#4 can see no cow's hairstyle
Cow#5 can see the hairstyle of cow 6
Cow#6 can see no cows at all!
Let ci denote the number of cows whose hairstyle is visible from cow i; please compute the sum of c1 through cN.For this example, the desired is answer 3 + 0 + 1 + 0 + 1 + 0 = 5.
Entry
Line 1: The number of cows, N.
Lines 2..N+1: Line i+1 contains a single integer that is the height of cow i.
Export
Line 1: A single integer that is the sum of c1 through cN.
Sample input
6
10
3
7
4
12
2
Sample Output
5
Source title
Problem-solving ideas: the i-th title mean to see to know all cattle than before it big or equal! Maintains a monotonically decreasing stack, if new elements can see the top of the stack than the small elements that stack elements of which it is the opposite that previously did not use this high to have been blocked!
1 // 2 #include <iostream> 3 #include <cstring> 4 #include <algorithm> 5 #include <cstdio> 6 #include <vector> 7 using namespace std; 8 9 typedef long long ll; 10 const int N=80005; 11 int sta[N]; 12 int n,d; 13 ll res; 14 15 int main(){ 16 ios::sync_with_stdio(false); 17 int Top = . 1 ; 18 is CIN >> n-; . 19 CIN >> D; 20 is STA [ . 1 ] = D; 21 is for ( int I = 2 ; I <= n-; I ++ ) { 22 is CIN >> D; 23 is the while ( D> = STA [Top] && Top) top-- ; 24 RES = Top +; // in front thereof can see his 25 STA [Top ++] = D; 26 is } 27 COUT RES << << endl; 28 return 0 ; 29 }