CF1984C 题解

题意不再赘述。

Sol

注意到操作一次后数列单调不降。

再操作一次后数列里数相等的连续的段长度至少为 2

然后每一次操作相当于把数组往右移位,低位补 0

操作两次后直接对每个数算贡献即可。

Code

#include <iostream>
using namespace std;
#define int long long
typedef pair<int,int> pii;
#define fi first
#define se second
#define mp make_pair
#define pb push_back
const int N=2e5+10,INF=0x3f3f3f3f3f3f3f3f,mod=1e9+7;
int n,a[N],b[N],t[N];
int S(int x){return (1+x)*x/2;}
void solve(){
	int ans=0,mx=0;
	cin>>n;
	fill(b,b+1+n,0);
	fill(t,t+1+n,0);
	for(int i=1;i<=n;i++){
		cin>>a[i],ans+=a[i];
		t[a[i]]++;
		if(t[a[i]]>=2)mx=max(mx,a[i]);
		b[i]=mx; 
	}
	fill(t,t+1+n,0);
	for(int i=1;i<=n;i++){
		t[b[i]]++;
	}
	int lst=0;
	for(int i=1;i<=n;i++){
		if(t[b[i]]>1){
			lst=b[i];
			ans+=(n-i+1)*b[i];
		}else{
			ans+=b[i];
			ans+=lst*(n-i);
		}
	}
	cout<<ans<<'\n';
}
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);
	int t;cin>>t;
	while(t--)solve();
	return 0;
}

posted @   Linge_Zzzz  阅读(2)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示