1 条题解
-
0
#include<bits/stdc++.h> using namespace std; long long n; // 原始数据 long long a[300015]; // t[i]表示最新的i出现的位置 long long t[300015]; // tt[i] 表示有多少个i long long tt[300015]; // presum[i] 形如ix这样的组合有多少个 long long presum[300015]; signed main(){ cin>>n; long long ans=0; for(long long i=1;i<=n;i++){ cin>>a[i]; // 更新 a[i],x 的组合数量 // 看前面有多少个a[i] // 然后计算两个a[i] 之间的数量 // 新增的a[i],x 的组合数量为 (i - t[a[i]] - 1) * tt[a[i]] presum[a[i]] += (i - t[a[i]] - 1) * tt[a[i]]; // 前面有多少个 a[i],x组合数量,当出现新的a[i]时就增加了相应的a[i],x,a[i]这样的夹心饼干 ans+=presum[a[i]]; // 更新a[i]的位置 t[a[i]]=i; // 更新a[i]的数量 tt[a[i]]++; } cout<<ans; return 0; }
信息
- ID
- 2046
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 8
- 标签
- 递交数
- 23
- 已通过
- 6
- 上传者