Saturday, June 27, 2009

52.PATRIK

PATRIK:
N people are waiting in line to enter a concert. People get bored waiting so they turn and look for
someone familiar in the line.
Two persons A and B standing in line can see each other if they're standing right next to each other or
if no person between them is strictly taller than person A or person B.

Write a program that determines the number of pairs of people that can see each other.

INPUT
The first line of input contains an integer N (1 ≤ N ≤ 500 000), the number of people standing in line.
Each of the following N lines contains a single integer, the height of one person in nanometres.
Everyone will be shorter than 231 nanometres.
The heights are given in the order in which people are standing in line.

OUTPUT
Output the number of pairs of people that can see each other on a single line.
SAMPLE TEST DATA
input
7
2
4
1
2
2
5
1
output
10

1 comments:

Anurag said...

One of the solution in c++
/*

PATRIK
*/



#include algorithm
#include cstdio

#include iostream

#include stack



using namespace std;



typedef long long llint;

typedef pair(int,int) par;



stack(par) S;



int main( void ) {

int n;

scanf( "%d", &n );



llint ret = 0;

for( int i = 0; i < n; ++i ) {

int h;

scanf( "%d", &h );



par p( h, 1 );

for( ; !S.empty() && S.top().first <= h; S.pop() ) {

ret += S.top().second;

if( S.top().first == h ) p.second += S.top().second;

}



if( !S.empty() ) ++ret;

S.push( p );

}



cout << ret << endl;



return 0;

}

Post a Comment