CF1990C Mad MAD Sum 题解
好题。考虑操作一次之后序列的性质,不难发现存在单调性。因为定义为出现至少两次的最大值,而从左到右最大值是可以继承的,所以单升不降。
然后,手玩一下发现之后的操作相当于把整个序列向后移动一位,左边使用 自动补齐。特别的,如果一个元素数量不足 个,会被左边满足要求的最大值替代。根据位置求出每个元素被计算的次数累加即可。
#include <bits/stdc++.h>
using namespace std;
long long t,n,a[300000],c[300000];
int main()
{
scanf("%lld",&t);
while(t--)
{
long long sum=0,mx=0;
scanf("%lld",&n);
for(int i=1;i<=n;i++)c[i]=0;
for(int i=1;i<=n;i++)
{
scanf("%lld",&a[i]),sum+=a[i];
c[a[i]]++;
if(c[a[i]]>=2)mx=max(mx,a[i]);
a[i]=mx;
}
mx=0;
for(int i=1;i<=n;i++)c[i]=0;
for(int i=1;i<=n;i++)
if(a[i]!=0)
{
c[a[i]]++;
if(c[a[i]]>=2)mx=max(mx,a[i]);
if((a[i]==mx)||(a[i]==a[i+1]))sum+=a[i]*(n-i+1);
else sum+=(a[i]+mx*(n-i));
}
printf("%lld\n",sum);
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探