题意:一个正整数序列,\(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. 从零开始的 dbt 入门教程 (dbt cloud 自动化篇)

    一.引 在前面的几篇文章中,我们从 dbt core 聊到了 dbt 项目工程化,我相信前几篇文章足够各位数据开发师从零快速入门 dbt 开发,那么到现在我们更迫切需要解决的是如何让数据更新做到定时化 ...

  2. quartus之LPM_COMPARE测试

    quartus之LPM_COMPARE测试 1.IP描述 比较器的IP,可以比较两路数据是否相等.相等输出为1,不等输出为0的aeb信号是需要测试的量. 2.基础测试 module compare_t ...

  3. KGIS支持的扩展介绍

    1.postgis postgis的基本核心功能,仅支持地理图形(矢量要素),在其他Extension前启用. 2.postgis_raster 对栅格数据的支持. 3.postgis_topolog ...

  4. KingbaseES V8R6 运维案例之---数据库连接访问故障分析

    KingbaseES V8R6运维案例之---数据库连接访问故障分析 案例说明: 在部署KingbaseES V8R6后,正常启动数据库服务,但是通过ksql连接数据库服务访问时,出现连接到postg ...

  5. KingbaseES Json 系列八:Json记录操作函数三

    KingbaseES Json 系列八--Json记录操作函数三(JSON_TABLE) JSON 数据类型是用来存储 JSON(JavaScript Object Notation)数据的.King ...

  6. (1,3,4,2,5)小和问题【Java】

    01[1,3,4,2,5]求小和 从右往左看:左边比右边小的加和到一起! 1 左边没有数 0 3 1 4 1+3 2 1 5 1+3+4+2 从左往右看:有几个数右边比左边大 1 4个数: 3 4 2 ...

  7. Scala 函数闭包和柯里化

    1 package com.atguigu.function 2 3 object HighFunction { 4 def main(args: Array[String]): Unit = { 5 ...

  8. NodeJS 实战系列:模块设计与文件分类

    我们从一个最简单的需求开始,来探索我们应该从哪些方面思考模块设计,以及如何将不同的文件分类.之所以说"思考",是因为我在这篇文章里更多的是提供一类解决问题的范式,而非统一的标准答案 ...

  9. #扩展欧拉定理#CF906D Power Tower

    题目 给定一个数列,有\(m\)组询问 定义 \[\large f(x-1)={a_x}^{f(x)} \] 若 \(f(r)=a_r\) 求 \(f(l)\) 对固定的 \(mod\) 取模 分析 ...

  10. 【中秋国庆不断更】OpenHarmony组件内状态变量使用:@State装饰器

    [中秋国庆不断更]OpenHarmony组件内状态变量使用:@State装饰器 @State装饰的变量,或称为状态变量,一旦变量拥有了状态属性,就和自定义组件的渲染绑定起来.当状态改变时,UI会发生对 ...