思路:排好序,使用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;
}