题目——Bad Hair Day
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.
思路
将一只牛能看到多少只其他的牛问题转化为一只牛能被多少只牛看到。
选择栈这种数据结构,当输入的牛的身高大于栈顶所存储的牛的身高,则将栈顶元素出栈。
解法一:STL
#include<iostream>
#include<stack>
using namespace std;
int main(void)
{
stack<int> s;
int n,high;
long long count=0;
cin >> n;
while(n--){
cin >> high;
while(!s.empty()&&s.top()<=high){
s.pop();
}
count+=s.size();
s.push(high);
}
cout << count << endl;
return 0;
}
stack容器
-
pop() 移除栈顶元素
-
push() 在栈顶增加元素
-
size() 返回栈中元素数目
-
top() 返回栈顶元素
-
empty() 堆栈为空则返回真
解法二:模拟栈
#include<iostream>
using namespace std;
int main(void)
{
int stack[80001];
int top,n,high;
long long count=0;
cin >> n ;
while(n--){
cin >> high;
while(top>0&&high>=stack[top-1]){
top--;
}
count+=top;
stack[top++]=high;
}
cout << count << endl;
return 0;
}