POJ 2796 Feel Good(单调栈)
来源:互联网 发布:阿里云ecs搭建php网站 编辑:程序博客网 时间:2024/06/10 21:10
题目链接:POJ 2796 Feel Good
统计一下前n项和,然后就是普通的单调栈了。
#include <iostream>#include <cstdio>#include <stack>using namespace std;const long long INF = (1 << 60);const int MAX_N = 100000 + 100;struct Node{ int l; long long h;};long long arr[MAX_N], sum[MAX_N];int main(){ int n; while(scanf("%d", &n) != EOF) { stack <Node> S; Node temp, tmp; long long _max = 0, k, h; int l, r; sum[0] = 0; scanf("%lld", &arr[0]); sum[0] = arr[0]; for(int i = 1; i < n; i++) { scanf("%lld", &arr[i]); sum[i] = sum[i - 1] + arr[i]; } for(int i = 0; i < n; i++) { temp.l = i, temp.h = arr[i]; while(!S.empty() && temp.h <= S.top().h) { tmp = S.top(); S.pop(); if(tmp.l != 0) k = tmp.h * (sum[i - 1] - sum[tmp.l - 1]); else k = tmp.h * sum[i - 1]; if(_max < k) { _max = k; l = tmp.l + 1; r = i; } temp.l = tmp.l; } S.push(temp); } while(!S.empty()) { tmp = S.top(); S.pop(); if(tmp.l != 0) k = tmp.h * (sum[n - 1] - sum[tmp.l - 1]); else k = tmp.h * sum[n - 1]; if(_max <= k) { _max = k; l = tmp.l + 1; r = n; } } printf("%lld\n%d %d\n", _max, l, r); } return 0;}
0 0
- POJ 2796 Feel Good 单调栈
- poj 2796 feel good(单调栈)
- POJ 2796 Feel Good (单调栈)
- POJ 2796 Feel Good(单调栈)
- POJ 2796 Feel Good -- 单调栈,DP
- 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 2796 Feel Good(单调栈)
- poj 2796 Feel Good 单调栈/dp
- 【POJ 2796】 Feel Good(单调栈)
- POJ 2796 Feel Good(单调栈)
- POJ 2796:Feel Good(单调栈)
- poj 2796 Feel Good 单调栈
- [poj 2796 Feel Good] 单调栈
- 哎呀,sql语句记不清楚了。。。
- C/C++中int/long/float/double数值类型与字符串互相转换
- 点与园
- csu 1459: Chess (橡棋)
- java application中内嵌ActiveX控件
- POJ 2796 Feel Good(单调栈)
- SQL Server 配置小教程
- linux 更改权限
- 【C语言/C++】 栈和队列
- ZOJ 1654 Place the Robots(超牛的建图思路) - from lanshui_Yang
- iOS绘图教程
- Android开发之屏幕元素层次结构
- SAP CoE Support Consultant Intern面试
- SQLite3 - 常见问题