poj3250(单调栈)

来源:互联网 发布:新浪微博做淘宝客 编辑:程序博客网 时间:2024/05/15 23:53

题意:一排牛,每头牛只可以看到自己右边连续的比自己矮的牛,求所有的牛看到的牛的数量和。

解法:裸的单调栈;

代码:

/***************************************************** author:xiefubao*******************************************************/#pragma comment(linker, "/STACK:102400000,102400000")#include <iostream>#include <cstring>#include <cstdlib>#include <cstdio>#include <queue>#include <vector>#include <algorithm>#include <cmath>#include <map>#include <set>#include <stack>#include <string.h>using namespace std;int num[100000];int tool[100000];int n;int main(){   cin>>n;   for(int i=n-1;i>=0;i--)    scanf("%d",num+i);    int p=0;    long long ans=0;   for(int i=0;i<n;i++)   {       while(p>0&&num[i]>num[tool[p-1]])        p--;        if(p==0) ans+=i;       else  ans+=i-tool[p-1]-1;       tool[p++]=i;   }   cout<<ans<<"\n";   return 0;}

0 0