题意:一个正整数序列,\(a[i] < 10^9\),求 \(l\),\(r\),最大化

\[\sum_{i = 1}^{l - 1} a[i] + \prod_{i = l}^r a[i] + \sum_{i = r + 1}^n a[i]
\]

诈骗题。

如果在 \([l, r]\) 间乘积的 \(T\) 中去除一个数 \(x\),对答案的贡献为 $$f(x) = x - T / x$$

若去除任意一个 \(x\) 都不会变优,由于是单增的,则

\[f(10^9) < 0
\]
\[T > 10^{18}
\]

所以一旦整个序列之积 \(> 10^{18}\),\(l\) 即为最左侧 \(> 1\) 的位置,\(r\) 为最右侧 \(> 1\) 的位置。

否则,大于 \(1\) 的数的个数 \(< 60\),枚举左右端点即可。

实际上这个上界远小于 \(10^{18}\),只不过这样更好想且也能轻松通过。

void solve() {
int n; cin >> n;
vector<ll> a(n + 1), sum(n + 1, 0), mul(n + 1, 1);
vector<int> pos;
rep(i, 1, n) cin >> a[i];
rep(i, 1, n) {
if(mul[i - 1] > 1e15 / a[i]) {
int l = 1, r = n ;
while(l < n && a[l] == 1) ++ l;
while(r > 1 && a[r] == 1) -- r;
return cout << l << ' ' << r << '\n', void();
}
if(a[i] > 1) pos.pb(i);
sum[i] = sum[i - 1] + a[i];
mul[i] = mul[i - 1] * a[i];
}
int l = 1, r = 1;
ll ans = 0;
for(int i : pos) {
for(int j : pos) {
if(i <= j) {
if(sum[i - 1] + (mul[j] / mul[i - 1]) + (sum[n] - sum[j]) > ans) {
ans = sum[i - 1] + (mul[j] / mul[i - 1]) + (sum[n] - sum[j]);
l = i;
r = j;
}
}
}
}
cout << l << ' ' << r << '\n';
}

随机推荐

  1. LOTO示波器实测过压保护芯片LP5300工作效果

      过压保护电路是电子产品设置中经常要用到的,以前都是用分立元件搭的各种经典电路,最近LOTO虚拟示波器客户推荐了一款很便宜的集成的过压保护芯片LP5300,体积很小,使用简单,外接两个电容就可以了, ...

  2. vivo 消息中间件测试环境项目多版本实践

    作者:vivo 互联网中间件团队 - Liu Tao 在开源 RocketMQ 基础之上,关于[测试环境项目多版本隔离]业务诉求的落地与实践. 一.背景 在2022年8月份 vivo 互联网中间件团队 ...

  3. Java封装xml格式参数请求第三方接口

    Java封装xml格式参数请求第三方接口 1.引用包 import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers ...

  4. #并查集,线性筛#nssl 1470 X

    分析 显然答案就是\(2^{连通块个数}-2\), 将每个数的质数所在的集合合并, 最后判断连通块个数即可(线性筛少了个等号改了半天QWQ) 代码 #include <cstdio> #i ...

  5. #Multi-SG#Poj 3537 Crosses and Crosses

    题目 有\(n\)个格子,可以在上面涂黑,连续三个黑色获胜,问先手是否必胜 分析 如果先手选择第\(i\)个格子涂黑,那么后手对于\(i-1,i+1,i-2,i+2\)一旦涂黑必败, 所以如果第\(i ...

  6. 深入理解 SQL UNION 运算符及其应用场景

    SQL UNION运算符 SQL UNION运算符用于组合两个或多个SELECT语句的结果集. 每个UNION中的SELECT语句必须具有相同数量的列. 列的数据类型也必须相似. 每个SELECT语句 ...

  7. Python 集合(Sets)3

    Python - 合并集合 在 Python 中,有几种方法可以合并两个或多个集合.您可以使用union()方法,该方法返回一个包含两个集合中所有项的新集合,或使用update()方法,将一个集合中的 ...

  8. 选择排序的基本实现【数据结构与算法—TypeScript 实现】

    笔记整理自 coderwhy 『TypeScript 高阶数据结构与算法』课程 概念 本质:两两元素相比较,先扫描一遍未排序数列,把未排序的数列中的最小(大)元素,放到数列的已排序的末尾 特性 选择排 ...

  9. k8s之operator

    背景 数字经济的兴起推动了云计算.物联网.大数据行业的快速蓬勃发展,对数据中心提出了更高的要求,同时,用户对于数据库运维自动化的需求越来越高,数据库即服务的需求越来越强烈. 随着k8s的普及以及云原生 ...

  10. k8s 深入篇———— docker 镜像是什么[二]

    前言 简单介绍一下docker的镜像. 正文 前面讲到了容器的工作原理了(namespace 限制了时间, cgroup限制了资源),知道docker 历史的也知道,docker 之所以能够称为容器大 ...