思路:排好序,使用b集合,在a中找到最后比b[i]小的,在c中找到第一个比b[i]大的,然后相乘即可。
使用algorithm文件中自带的二分函数
upper_bound(first*,last*,val)
lower_bound(first*,last*,val)
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;ll a[100005];
ll b[100005];
ll c[100005];int main(void)
{ll n;cin>>n;for(int i=0;i<n;i++){cin>>a[i];}for(int i=0;i<n;i++){cin>>b[i];}for(int i=0;i<n;i++){cin>>c[i];}sort(a,a+n);sort(b,b+n);sort(c,c+n);ll ans=0;for(int i=0;i<n;i++){int j=lower_bound(a,a+n,b[i])-a; int k=upper_bound(c,c+n,b[i])-c;ans+=j*(n-k); }cout<<ans;return 0;
}