题意:一群高度不完全相同的牛从左到右站成一排,每头牛只能看见它右边的比它矮的牛的发型,若遇到一头高度大于或等于它的牛,则无法继续看到这头牛和后面的其他牛的发型。
给出这些牛的高度,要求每头牛可以看到的牛的数量的和。
思路:计算每头牛可以看到牛的头数,可以等效于每头牛可以被看到的次数
给出这些牛的高度,要求每头牛可以看到的牛的数量的和。
思路:计算每头牛可以看到牛的头数,可以等效于每头牛可以被看到的次数
从左到右依次读取当前牛的高度,从栈顶开始把高度小于或等于当前牛的高度的那些元素删除,此时栈中剩下的元素的数量就是可以看见当前牛的其他牛的数量,求和就是答案。
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <stack>
#include <string>
#include <cmath>
#include <cstdio>
#include <functional> //小根堆特有头文件
typedef long long ll;
#define N 1005
using namespace std;
int main()
{
int n;
while(scanf("%d",&n)==1){
int num;
ll sum=0;
scanf("%d",&num);
stack<int>s;
while(!s