AT_arc174_a的题解
(一)
注意到,
主要考虑操作后的变化量。
-
当
时,不会改变序列。 -
当
时,和最大即为增加最多。那么求出最大子段和,再乘上 即为变化量。 -
当
时,将序列每个数取反即可。
(二)
我因为不会最大字段和挂了 3 发。
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,c,a[300010],sum;
signed main(){
scanf("%lld%lld",&n,&c);
for(int i=1;i<=n;i++)scanf("%lld",&a[i]),sum+=a[i];
if(c==1){
printf("%lld\n",sum);
return 0;
}
if(c<=1)for(int i=1;i<=n;i++)a[i]*=-1;
int mx=a[1],s=a[1];
for(int i=2;i<=n;i++){
if(s<0)s=0;
s+=a[i];
mx=max(mx,s);
}
mx=max(mx,s);
if(c>0)printf("%lld\n",max(sum,sum+(c-1)*mx));
else printf("%lld\n",max(sum,sum+(1-c)*mx));
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探