Advertisement

牛客BadHairDay题解(单调栈)

阅读量:

原题链接:https://ac.nowcoder.com/acm/problem/25084
解题思路:以队列末端为起点,建立一个单调递增的栈结构,在每头牛的身高被压入栈之前,需确保栈中所有牛的身高均高于当前牛,这样每头牛入栈时,栈中已有的所有元素所对应的牛均可看见当前牛,因此此时栈内元素的数量即为新增的可见数量,最终所有牛能够看到的总数应累加栈中元素的数量
①正向运用单调栈原理
②深入领会单调栈所蕴含的逻辑意义

复制代码
    #include<iostream>
    #include<cstdio>
    using namespace std;
    int a[80010], n, top = 0;
    int main()
    {
    	scanf("%d",&n);
    	long long ans = 0;
    	while(n--){
    		int x;
    		scanf("%d",&x);
    		while(top && a[top-1] <= x){//如果此时栈不空,将个头比当前牛矮的牛出栈
    			top--;
    		}
    		ans += top;//总数加上此时栈内牛的个数
    		a[top++] = x;//将新来的牛入栈
    	}
    	printf("%ll

全部评论 (0)

还没有任何评论哟~