#include<iostream>
#include<algorithm>
using namespace std;
const int N = 1e5+10;
int n;
int a[N],b[N],c[N];
int a1,c1;
long long res;
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
for(int i=1;i<=n;i++) scanf("%d",&b[i]);
for(int i=1;i<=n;i++) scanf("%d",&c[i]);
sort(a+1,a+n+1);
sort(b+1,b+n+1);
sort(c+1,c+n+1);
for(int i=1;i<=n;i++){
int l=1,r=n;
while(l<r){
int mid = l+r+1>>1;
if(a[mid]<b[i]) l=mid;
else r=mid-1;
}
a1=l;
if(a[l]>=b[i]) a1--;
l=1,r=n;
while(l<r){
int mid = l+r>>1;
if(c[mid]>b[i]) r=mid;
else l=mid+1;
}
c1=n-r+1;
if(c[l]<=b[i]) c1--;
res += (long long)a1*c1;
}
printf("%lld",res);
}
二分求解递增三元组(c++实现)
最新推荐文章于 2024-03-07 15:19:41 发布