首页 > 代码库 > POJ 2796 Feel Good(单调栈)
POJ 2796 Feel Good(单调栈)
题目地址:POJ 2796
单调栈的第一题就是这道。。把我弄的晕头转向。现在终于明白了,对单调栈又加深了理解。原来单调栈不只是可以维护数。
代码如下:
#include <iostream> #include <cstdio> #include <string> #include <cstring> #include <stdlib.h> #include <math.h> #include <ctype.h> #include <queue> #include <map> #include <set> #include <algorithm> #include <stack> using namespace std; #define LL long long int l[200000], r[200000]; LL a[200000], sum[200000]; int main() { int n, i, ll, rr; LL ans, max1=-1; scanf("%d",&n); sum[0]=0; for(i=1;i<=n;i++) { scanf("%d",&a[i]); l[i]=r[i]=i; sum[i]=sum[i-1]+a[i]; } for(i=1;i<=n;i++) { while(l[i]>1&&a[l[i]-1]>=a[i]) { l[i]=l[l[i]-1]; } } for(i=n;i>=1;i--) { while(r[i]<n&&a[r[i]+1]>=a[i]) { r[i]=r[r[i]+1]; } } for(i=1;i<=n;i++) { ans=(sum[r[i]]-sum[l[i]-1])*a[i]; if(max1<=ans) { max1=ans; ll=l[i]; rr=r[i]; } } printf("%lld\n%d %d\n",max1,ll,rr); return 0; }
POJ 2796 Feel Good(单调栈)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。