8 You Are So Beautiful

image
image
image
image

如果要是子数组唯一,没有子序列与之相同,那么就要找同一个字母的第一个出现的位置和最后一个出现的位置

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+10;
int a[N];
void solve(){
	int n;
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	map<int,int>mp,st,ed;
	for(int i=1;i<=n;i++){
		if(mp[a[i]]==0){
			mp[a[i]]++;
			st[a[i]]=i;
		}
		ed[a[i]]=i;
	}
	int ans=0;
	int cnt=0;
	for(int i=1;i<=n;i++){
		if(st[a[i]]==i)cnt++;
		if(ed[a[i]]==i)ans+=cnt;
	}
    cout<<ans<<"\n";
}
signed main(){
	ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
	int t=1;
	cin>>t;
	for(int i=1;i<=t;i++)solve();
	return 0;
} 
posted @ 2024-01-09 20:59  yufan1102  阅读(7)  评论(0编辑  收藏  举报