博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Gym 101334F Feel Good
阅读量:7308 次
发布时间:2019-06-30

本文共 752 字,大约阅读时间需要 2 分钟。

题意:

给定一串数,求一个区间,使得该区间的所有数之和乘以该区间内最小的数的乘积最大。

分析:

每一个元素都有可能为该区间最小值,所以我们往该元素的左右方向扩展,越大越好。但是扩展的时候如果逐个遍历肯定会超时,那么这个地方需要一个优化。如果往左遇到的是比自己要大的元素,可以直接跳到这个大的元素对应的比它小的坐标数。求出区间后,利用前缀和即可快速求出答案。

#include 
using namespace std;typedef long long ll;const int maxn=100000+5;ll a[maxn],s[maxn];int l[maxn],r[maxn];int main(){ freopen("feelgood.in","r",stdin); freopen("feelgood.out","w",stdout); int n; scanf("%d",&n); for(int i=1; i<=n; i++) { scanf("%I64d",&a[i]); s[i]=s[i-1]+a[i]; } for(int i=1; i<=n; i++) { int j=i-1; while(1) { if(a[j]
=1; i--) { int j=i+1; while(1) { if(a[j]

 

转载于:https://www.cnblogs.com/pach/p/6947166.html

你可能感兴趣的文章
centos7安装saltstack
查看>>
基于Elasticsearch开发时的注意事项备忘
查看>>
适配器模式 adapter 结构型 设计模式(九)
查看>>
Zepto 使用中的一些注意点(转)
查看>>
Java算法练习——字符串转换整数 (atoi)
查看>>
sql对于between和时间
查看>>
分布式锁的实现
查看>>
移动平台对 META 标签的定义
查看>>
Linux之od命令详解
查看>>
day1
查看>>
详解jar命令打包生成双击即可运行的Java程序
查看>>
Shell脚本(一)
查看>>
Linux 程序包管理 rpm yum dnf
查看>>
比较好用的硬盘格式化恢复软件
查看>>
创建数据库(表)
查看>>
IPSEC协议
查看>>
MySQL必知必会面试题(二)
查看>>
CMS垃圾回收过程
查看>>
c#中的继承
查看>>
linux 三剑客老三-grep
查看>>