求hack
查看原帖
求hack
763878
Jerry_heng楼主2024/7/21 21:26
#include<bits/stdc++.h>
#define pb push_back
#define fi first
#define se second
#define mp make_pair
#define pii pair<int,int>
#define int long long
using namespace std;
inline int read(){
    int x=0,f=1;char c=getchar();
    while(c<'0'||c>'9'){if(c=='-')f=-f;c=getchar();}
    while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
    return x*f; 
}
int vis[200010],a[200010],n,cnt;
int query(int pos,int x){
	if(x==1)return 1;
	return x*(x+1)/2+(cnt-pos)*x;
}
signed main(){
	freopen("in.txt","r",stdin);
	freopen("out.txt","w",stdout);
	int T=read();
	while(T--){
		n=read();
		int ans=0;
		for(int i=1;i<=n;i++)
			vis[i]=0;
		for(int i=1;i<=n;i++)
			a[i]=read(),ans+=a[i];
		cnt=0;
		int mx=0;
		for(int i=1;i<=n;i++){
			vis[a[i]]++;
			if(vis[a[i]]>1&&a[i]>mx)mx=a[i];
			if(mx)a[++cnt]=mx;
		}
		if(cnt){
			int x=a[1],s=1;
			for(int i=2;i<=cnt;i++){
				if(a[i]==x)s++;
				else{
					ans+=query(i-1,s)*x;
					s=1;
					x=a[i];
				}
			}
			ans+=query(cnt,s)*x;
		}
		printf("%lld\n",ans);
	}
    return 0;
}
2024/7/21 21:26
加载中...