uva1619-feel good
来源:互联网 发布:淘宝卖家哪个交易好用 编辑:程序博客网 时间:2024/05/21 17:45
题意:给出一段序列,输出这段序列的子序列中的所有数的和与子序列的最小值的乘积最大的数,并找到子序列的起始点和终止点。
思路:找到每一个数作为一串子序列的最小值时所要求的值。
代码:
#include <bits/stdc++.h>const int maxn = 1e5 + 10;typedef long long ll;int num[maxn], l[maxn], r[maxn], n;ll sum[maxn];void init() { sum[0] = 0; memset(num,-1,sizeof num); for(int i = 1; i <= n; i++) { scanf("%d", &num[i]); sum[i] = sum[i-1] + num[i]; l[i] = i; r[i] = i; } for(int i = 1; i <= n; i++) { while(num[l[i] - 1] >= num[i]) l[i] = l[l[i] - 1]; } for(int i = n; i >= 1; i--) { while(num[r[i] + 1] >= num[i]) r[i] = r[r[i] + 1]; }}void solve() { ll Max = 0; int ml = 1, mr = 1; ll s; for(int i = 1; i <= n; i++) { s = num[i] * (sum[r[i]] - sum[l[i] - 1]); if(s > Max || (s == Max && mr - ml > r[i] - l[i])) { Max = s; ml = l[i]; mr = r[i]; } } printf("%lld\n%d %d\n", Max, ml, mr);}int main() { int times = 0; while(scanf("%d", &n) != EOF) { if(times) printf("\n"); times++; init(); solve(); } return 0;}
0 0
- [UVA1619]Feel Good[DP]
- uva1619-feel good
- Feel Good
- Feel Good
- Feel Good
- Feel Good
- Feel Good
- Feel Good Inc
- poj 2796 Feel Good
- POJ 2796 Feel Good
- POJ 2796 Feel Good
- poj 2796 Feel Good
- poj 2796 feel good
- POJ-2796-Feel Good
- SGU-180-Feel Good
- I feel good comment
- POJ 2796Feel Good
- poj 2796 Feel Good
- instrumentation模拟很多activity的操作
- Java-Oracle存储过程知识小题
- 测试
- #1051 : 补提交卡
- linux中的物理地址,虚拟地址,总线地址的区别
- uva1619-feel good
- mysql批量导入txt时之操作文件得到命令
- mybatis源码编译
- HDU 5873 Football Games .
- javascript 正则表达式RegExp
- 字符编码的故事:ASCII,GB2312,Unicode,UTF-8,UTF-16
- 模拟信号的调制方式有哪三种?调制与解调是个啥过程
- C语言中常用的字符串处理函数
- IOS 10 适配系列_4_ 权限Crash问题