#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-11-15 15:51:39 发布
这篇文章介绍了如何使用C++编程语言,结合排序和二分查找算法,计算给定数组a、b和c中满足条件a[i]>=b[i]且c[i]<=b[i]的元素对的数量。
3059

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



