ACM - 단조 로 운 창고 -- Bad Hair Day - POJ -- 3250 -- 물
POJ 주소:http://poj.org/problem?id=3250
Bad Hair Day
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 cowsi+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.
Input
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.
Output
Line 1: A single integer that is the sum of
c
1 through
cN.
Sample Input
6
10
3
7
4
12
2
Sample Output
5
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = 화려 한 분할 선 = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
단조 로 운 스 택 의 입문 문제: 단조 로 운 스 택 은 하나의 스 택 을 유지 하 는 것 입 니 다. 스 택 의 요 소 는 모두 단조 로 운 증가 또는 감소 순 서 를 유지 하고 있 습 니 다.
제목: n 마리 의 소 가 한 줄 에 서서 대열 에 있 는 모든 소의 높이 를 제시 하고, 모든 소 는 오른쪽 이 그것 보다 작은 소 만 볼 수 있 으 며, 모든 소 가 볼 수 있 는 소의 수의 합 을 구한다. 우리 가 새로 고도 치 를 넣 었 을 때, 만약 창고 에 원소 가 새로 가입 한 고도 치보다 작다 면, 이 소 는 틀림없이 이 고도 의 소 를 볼 수 없 을 것 이다. 이 원소 창 고 를.
매번 새로운 요 소 를 추가 하고 팝 업 작업 을 수행 한 후에 창고 에 있 는 요소 의 개 수 는 바로 이 소의 '소 수' 를 볼 수 있 습 니 다.
#include<iostream>
#include<cstdio>
#include<stack>
using namespace std;
int main(void){
int n;
stack <long long>sta;
if(scanf("%d",&n)!=EOF){
long long result=0;
long long x;
cin>>x;
//
sta.push(x);
for(int i=1;i<n;i++){
cin>>x;
while(!sta.empty()&&sta.top()<=x){
sta.pop();
}
result+=sta.size();
sta.push(x);
}
cout<<result<<endl;
//
while(!sta.empty()){
sta.pop();
}
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
ACM - 계산 기하학 적 Pick - up sticks -- poj 2653Description Stan has n sticks of various length. The data for each case start with 1 <= n <= 100000, the number of stick...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.