AtCoder Beginner Contest 252 D - Distinct Trio

找出三元组i,j,k(i<j<k,ai,aj,ak互不相等)
等价于找出ai,aj,ak(ai<aj<ak,i,j,k互不相等)
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 2e5+10;
int sum[N];
unordered_map<int,int> cnt;
vector<int> v;
int main(){
int n,a;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a;
if(cnt[a]==0) v.push_back(a);
cnt[a]++;
}
sort(v.begin(),v.end());
LL ans=0;
int len=v.size();
for(int i=0;i<len;i++) sum[i+1]=sum[i]+cnt[v[i]];
for(int i=2;i<=len-1;i++) ans+=(LL)(sum[i]-sum[i-1])*sum[i-1]*(sum[len]-sum[i]);
cout<<ans;
return 0;
}

本文作者:xhy666

本文链接:https://www.cnblogs.com/xhy666/p/16306723.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   xhy666  阅读(36)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起