序列求解
描述
给定三个整数序列,其中A=[A1,A2,...AN],B=[B1,B2,...BN],C=[C1,C2,...CN]。请你统计有多少个三元组(i,j,k)满足:
1≤i,j,k≤N
Ai<Bj<Ck
输入
输入第1行一个整数N,表示数列长度;
输入第2行包含N个整数,表示A序列;
输入第3行包含N个整数,表示B序列;
输入第4行包含N个整数,表示C序列;
输出 输出一个整数表示答案。
输入样例 1
3
1 1 1
2 2 2
3 3 3
输出样例 1
27
提示
对于30%的数据, 1≤N≤100;
对于60%的数据, 1≤N≤1000;
对于100%的数据, 1≤N≤100000, 0≤Ai,Bi,Ci≤100000;
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,sum;
int a[1005],b[1005],c[1005];
signed main()
{
//freopen("string.in", "r", stdin);
//freopen("string.out", "w", stdout);
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
for(int i=1;i<=n;i++)
{
cin>>b[i];
}
for(int i=1;i<=n;i++)
{
cin>>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 q=lower_bound(b+1,b+n+1,a[i])-b-1;
// if(b[q]<=a[i])
// {
// break;
// }
int p=lower_bound(c+1,c+n+1,b[q])-c-1;
// if(c[p]<=b[q])
// {
// break;
// }
sum+=(n-p)*(n-q);
}
cout<<sum<<endl;
return 0;
}
/*
*/