ABC318-E

挺有意思的一题,就当积累一下吧。

做法

枚举i和k会超时,那就只枚举j。

#include<bits/stdc++.h>

using namespace std;

int n;

int a[300010];

vector<int> v[300010];

int main(){

scanf("%d",&n);

map<int,int> mp;//数的种类

for(int i=1;i<=n;i++){

scanf("%d",&a[i]);

v[a[i]].push_back(i);//存下标

mp[a[i]]++;

}

long long ans=0;

for(map<int,int>::iterator it=mp.begin();it!=mp.end();it++){

for(int i=1;i<v[it->first].size();i++){

ans+=1ll*(v[it->first][i]-v[it->first][i-1]-1)*i*(v[it->first].size()-i);

//(v[it->first][i]-v[it->first][i-1]-1)是不同的j,i是在a[j]前面a[i]的个数,(v[it->first].size()-i)是在a[j]前面a[i]的个数

}

}

cout<<ans<<endl;

}

相关推荐
清酒难咽9 分钟前
算法案例之分治法
c++·经验分享·算法
小屁猪qAq9 分钟前
强符号和弱符号及应用场景
c++·弱符号·链接·编译
wen__xvn11 分钟前
代码随想录算法训练营DAY25第七章 回溯算法 part04
算法·leetcode·深度优先
亲爱的非洲野猪14 分钟前
动态规划进阶:序列DP深度解析
算法·动态规划
头发还没掉光光14 分钟前
HTTP协议从基础到实战全解析
linux·服务器·网络·c++·网络协议·http
zzcufo17 分钟前
多邻国第五阶段第13部分
java·开发语言·数据库
37方寸26 分钟前
前端基础知识(JavaScript)
开发语言·前端·javascript
不染尘.26 分钟前
双指针算法
算法
2501_9011478330 分钟前
题解:有效的正方形
算法·面试·职场和发展·求职招聘
你撅嘴真丑30 分钟前
习题与总结
算法