D. Running Miles(公式转换)

news/2024/11/15 2:46:29/

Problem - D - Codeforces

有一条长为n的街道,其中第i个景点距离街道起点i英里。第i个景点的美丽值为bi。你想要在离街道起点l英里和r英里处开始和结束慢跑。当你跑步时,你会看到你经过的景点(包括起点和终点处的景点)。你对沿途慢跑时最美丽的三个景点感兴趣,但是随着你奔跑的英里数增加,你会越来越累。

因此,请选择l和r,使您途中至少经过3个景点,并且三个最美丽的景点的美丽数之和减去您必须奔跑的英里数最大化。更正式地,选择l和r,使得bi1+bi2+bi3−(r−l)的值最大,其中i1、i2和i3是范围[l,r]内三个最大元素的索引。

输入格式: 第一行包含一个整数t(1≤t≤105)——测试用例的数量。 每个测试用例的第一行包含一个整数n(3≤n≤105)。 每个测试用例的第二行包含n个整数bi(1≤bi≤108)——表示街道上第i个景点的美丽值。

保证所有n的总和不超过105。

输出格式: 对于每个测试用例,输出一个整数,表示某些奔跑区间[l,r]的最大值bi1+bi2+bi3−(r−l)。

Example

Input

Copy

 

4

5

5 1 4 2 3

4

1 1 1 1

6

9 8 7 6 5 4

7

100000000 1 100000000 1 100000000 1 100000000

Output

Copy

8
1
22
299999996

在第一个例子中,我们可以选择 l 和 r 为 1 和 5。因此,我们参观了所有景点,其中美丽值最大的三个景点是索引为 1、3、5 的景点,其美丽值分别为 5、4 和 3。因此,总价值为 5+4+3-(5-1)=8。

在第二个例子中,范围 [l, r] 可以是 [1,3] 或 [2,4],总价值为 1+1+1-(3-1)=1。

题解:
如果写一道题没什么思路,试试转换一下题目中所给公式,变形一下

假设要选的三个值

左边的为al 中间为am 右边为ar

al + am + ar - (r - l)可以变形为

al + l + ar - r + am

我们可以分别得到前缀后缀最大值

然后枚举am即可求出答案

#include <cstdio>
#include <cstring>
#include <algorithm>
#include<iostream>
#include<vector>
#include<set>
#include<map>
#include<cmath>
#include<queue>
using namespace std;
typedef long long ll;#define int long long
typedef pair<int,int> PII;
typedef unsigned long long ULL;
const int N = 4e5 + 10;
int mod = 1e9 + 7;
int pre[N];
int las[N]; 
int a[N];
void solve()
{int n;cin >> n;las[n + 1] = -1e9;pre[0] = -1e9;for(int i = 1;i <= n;i++){cin >> a[i];}for(int i = 1;i <= n;i++){pre[i] = max(pre[i - 1],a[i] + i);}for(int i = n;i >= 1;i --){las[i] = max(las[i + 1],a[i] - i);}int ans = 0;for(int i = 2;i < n;i++){ans = max(ans,a[i] + las[i + 1] + pre[i - 1]);}cout << ans <<"\n";
}
signed main()
{ios::sync_with_stdio(0 );cin.tie(0);cout.tie(0);int t = 1;cin >> t;while(t--){solve(); }
}

 


http://www.ppmy.cn/news/517458.html

相关文章

C++之判断文件是否存在的几种方法

文章目录 1. 方法一&#xff1a;C语言之access2. 方法二&#xff1a;C方法之ifstream3. 方法三&#xff1a;fopen方法4. 方法四&#xff1a;sys中的stat函数方法 1. 方法一&#xff1a;C语言之access 可以使用C语言中unistd.h里的函数access()来判断文件是否存在&#xff0c;…

MusicGen配乐工具开源,教你怎么给抖音短视频配乐,助你涨粉1000!

大家好&#xff0c;我是千与千寻&#xff0c;好久不见了&#xff0c;很多粉丝私信我说&#xff0c;千寻哥这是去哪了&#xff1f;难道被野外捕捉了。 哈哈哈&#xff0c;当然不是了&#xff0c;千寻依然在学习ChatGPT的道路上和大家一起学习&#xff0c;一起搞钱&#xff01; 但…

tensorRT部署之 代码实现 onnx转engine/trt模型

tensorRT部署之 代码实现 onnx转engine/trt模型 前提已经装好显卡驱动、cuda、cudnn、以及tensorRT下面将给出Python、C两种转换方式 1. C实现 项目属性配置好CUDA、tensoeRT库通常在实际应用中会直接读取onnx模型进行判断&#xff0c;如果对应路径已经存在engine模型&#…

redis协议与异步方式学习笔记

目录 1 交互方式 pipline2 广播机制2.1 概念演示2.2 使用场景 3 redis事物3.1 概念3.2 使用场景3.3 解决的问题3.3.1 背景&#xff1a;多线程竞争出现问题3.3.2 事务3.3.3 安全性事务 3.4两种类型的“事务”3.4.1 watch ... multi exec3.4.2 lua 脚本实现“原子”执行&#xff…

@4.verilog 参数

参数 参数化:参数用来定义时延和变量的宽度&#xff0c;以及状态的编码等 参数类型 parameter&#xff1a;通过例化传参&#xff0c;改变参数值 localparam&#xff1a; parameter 只能对参数赋值一次&#xff0c;使用defparam 实现 注 对于传多个参数时&#xff0c;如BUS_A…

(完美)华为麦芒4 RIO-AL00的usb调试模式在哪里打开的步骤

在我们使用PC通过数据线链接到安卓手机的时候&#xff0c;如果手机没有开启Usb调试模式&#xff0c;PC则没办法成功读到我们的手机&#xff0c;有时&#xff0c;我们使用的一些功能较强的APP好比之前我们使用的一个APP引号精灵&#xff0c;老版本就需要打开Usb调试模式下使用&a…

大数据学习笔记-HDFS(四)——HDFS架构

1、HDFS架构 Hadoop Distribute File System&#xff0c;Hadoop分布式文件系统&#xff0c;HDFS是Hadoop核心组件之一&#xff0c;作为生态圈最底层的分布式服务而存在。 HDFS解决的问题就是大数据如何存储。 架构图&#xff1a;主从架构&#xff08;master/slave&#xff0…

4. 参数配置

4. 参数配置 参数 查看参数 show parameter parameter_name;查看参数是静态参数还是动态参数 select name,value,isses_modifiable,issys_modifiable from v$system_parameter;-- isses_modifiable 和issys_modifiable 分别对应的是session级别修改的参数和system级别修改…