题目
给定三个整数数组A=[A1,A2,…AN],B=[B1,B2,…BN],C=[C1,C2,…CN],
请你统计有多少个三元组 (i,j,k)满足: 1≤i,j,k≤N,Ai<Bj<Ck
输入格式
第一行包含一个整数 N。
第二行包含 N个整数 A1,A2,…AN。
第三行包含 N个整数 B1,B2,…BN。
第四行包含 N个整数 C1,C2,…CN。
输出格式
一个整数表示答案。
数据范围
1≤N≤105,0≤Ai,Bi,Ci≤105
输入样例:
3
1 1 1
2 2 2
3 3 3
输出样例:
27
分析
之前一直以为要满足i<=j<=k这个条件,然后一直在纠结怎么满足这个条件,,,
可是后来发现并不需要满足,所以可以直接排序,然后遍历b数组就行,记得要用long long保存结果
代码
#include<iostream>
#include<algorithm>
long long n,aa[123456],bb[123456],cc[123456];
using namespace std;
int main()
{
long long res=0;
cin>>n;
for(long long i=0;i<n;i++) cin>>aa[i];
sort(aa,aa+n);
for(long long i=0;i<n;i++) cin>>bb[i];
sort(bb,bb+n);
for(long long i=0;i<n;i++) cin>>cc[i];
sort(cc,cc+n);
for(long long i=0;i<n;i++)
{
long long t=lower_bound(aa,aa+n,bb[i])-aa;
long long tt=upper_bound(cc,cc+n,bb[i])-cc;
res+=t*(n-tt);
}
cout<<res<<endl;
return 0;
}