题目既然说 min(i,j,k)=j\min(i,j,k)=jmin(i,j,k)=j 或 max(i,j,k)=k\max(i,j,k)=kmax(i,j,k)=k,那么我们直接去枚举 j 即可,最后答案就是所有的大于×大于,小于×小于之和,注意5是否整除 aja_jaj。
code:
#include <bits/stdc++.h>
using namespace std;
long long n, a[300005], da = 0;
map<long long, vector<long long> > mp;
int main(){
scanf("%lld", &n);
a[0] = 3e9;
for(int i = 1;i<=n;i++){
scanf("%lld", &a[i]);
mp[a[i]].push_back(i);
}
for(int i = 1;i<=n;i++){
if(a[i] % 5==0){
long long ans = lower_bound(mp[a[i] / 5 * 3].begin(), mp[a[i] / 5 * 3].end(), i) - mp[a[i] / 5 * 3].begin(), res = lower_bound(mp[a[i] / 5 * 7].begin(), mp[a[i] / 5 * 7].end(), i) - mp[a[i] / 5 * 7].begin();
da += ans * res + (mp[a[i] / 5 * 3].size() - ans) * (mp[a[i] / 5 * 7].size() - res);
}
}
printf("%lld", da);
return 0;
}
1019

被折叠的 条评论
为什么被折叠?



