1686: Bad Hair Day (monotonous stack)

1686: Bad Hair Day QQ space to share

Time limit (Normal / Java): 2000MS / 20000MS memory limit: 65536KByte
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 ≤ h≤ 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

USACO November 2006

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 }
View Code

 

Guess you like

Origin www.cnblogs.com/qq-1585047819/p/11345172.html