poj3250+单调栈,换种数据结构和思维解决问题

来源:互联网 发布:软件设计师好过吗 编辑:程序博客网 时间:2024/06/17 14:19
///单调栈#include<stdio.h>#include<stdlib.h>#include<iostream>#include<string.h>#include<cstring>#include<string>#include<algorithm>#include<math.h>#include<queue>#include<set>#define LL long long#define inf 0x3f3f3f3f#define mod 1e9+7using namespace std;const int maxn=80005;int s[maxn],top=0,N=0;///把要求作一下转换(这个是最重要的),其实就是要求每头牛被看到的次数之和。这个可以使用单调栈来解决。///从左到右依次读取当前牛的高度,从栈顶开始把高度小于或等于当前牛的高度的那些元素删除,///此时栈中剩下的元素的数量就是可以看见当前牛的其他牛的数量。把这个数量加在一起,就可以得到最后的答案了。int main(){    int num=0;    LL ans=0;    scanf("%d",&N);    while(N--){        scanf("%d",&num);        while(top>0&&s[top-1]<=num)top--;        ans+=top;        s[top++]=num;    }    printf("%lld\n",ans);    return 0;}

0 0
原创粉丝点击