Feel Good POJ
来源:互联网 发布:excel如何导入外部数据 编辑:程序博客网 时间:2024/04/30 14:17
题目:http://poj.org/problem?id=2796.
题意:给一个序列,定义一段序列的T值为这段序列元素和成最小元素大小
单调栈裸题,。。。有答案等于0的情况,,,,,因为写法ans记录结果初值赋了0,比较时判断当大于0才改变记录的结果值,这明显是会错的。。。。。wa了半天没看出来。。。
#include<algorithm>#include<stdio.h>#include<iostream>using namespace std;long long a[100005];long long sum[100005];struct node{ int index,c,l,r;}ack[100005];int main(){ int n,i,l,r; cin>>n; for(i=0;i<n;i++) { scanf("%lld",&a[i]); } int top=0; sum[0]=a[0]; for(i=1;i<n;i++) sum[i]=sum[i-1]+a[i]; long long ans=0; for(i=0;i<n;i++) { node temp; temp.c=a[i]; temp.index=i; temp.l=i; temp.r=i; while(top>0&&ack[top-1].c>=a[i]) { top--; if(top) ack[top-1].r=ack[top].r; temp.l=ack[top].l; // cout<<ack[top].index<<" "<<ack[top].l<<" "<<ack[top].r<<endl; if(ack[top].c*(sum[ack[top].r]-(ack[top].l?sum[ack[top].l-1]:0))>=ans) ans=ack[top].c*(sum[ack[top].r]-(ack[top].l?sum[ack[top].l-1]:0)),l=ack[top].l,r=ack[top].r; } ack[top++]=temp; } while(top) { top--; if(top) ack[top-1].r=ack[top].r; if(ack[top].c*(sum[ack[top].r]-(ack[top].l?sum[ack[top].l-1]:0))>=ans) ans=ack[top].c*(sum[ack[top].r]-(ack[top].l?sum[ack[top].l-1]:0)),l=ack[top].l,r=ack[top].r; } cout<<ans<<endl<<l+1<<" "<<r+1<<endl; return 0;}
阅读全文
0 0
- poj 2796 Feel Good
- POJ 2796 Feel Good
- POJ 2796 Feel Good
- poj 2796 Feel Good
- poj 2796 feel good
- POJ-2796-Feel Good
- POJ 2796Feel Good
- poj 2796 Feel Good
- POJ 2796 Feel Good
- poj 2796 Feel Good
- Poj-2796 Feel Good
- POJ 2796 Feel Good
- poj 2796 Feel Good
- poj 2796Feel Good
- POJ 2796 Feel Good
- POJ 2796 Feel Good
- poj 2796 Feel Good
- POJ 2796 Feel Good
- 深度学习模型压缩方法综述(一)
- HDU5115Dire Wolf(区间DP)
- web项目bug总结
- The first time
- acl权限验证
- Feel Good POJ
- Win+Debian下更改硬盘分区的影响及解决办法
- Python爬虫Xpath和lxml类库系列之九
- HDU-5367 digger(线段树区间合并)
- c++中new/delete与malloc/free的区别与联系
- 菱形继承
- git--多人合作
- 【BZOJ】3343 教主的魔法 分块
- UVA