题目描述
给定三个整数数组
A = [A1, A2, … AN],
B = [B1, B2, … BN],
C = [C1, C2, … CN],
请你统计有多少个三元组(i, j, k) 满足:
1. 1 <= i, j, k <= N
2. Ai < Bj < Ck
输入
第一行包含一个整数N。 第二行包含N个整数A1, A2, ... AN。 第三行包含N个整数B1, B2, ... BN。 第四行包含N个整数C1, C2, ... CN。
输出
一个整数表示答案
样例输入复制
3 1 1 1 2 2 2 3 3 3
样例输出复制
27
#include<iostream>
#include<algorithm>
#define res(n) for(int i = 0; i < n; i++)
typedef long long ll;
using namespace std;
const int N = 100010;
int A[N],B[N],C[N];
int big[N];
ll ans;
int main()
{
int n;
cin >> n;
res(n) cin >> A[i];
res(n) cin >> B[i];
res(n) cin >> C[i];
sort(A,A+n);
sort(B,B+n);
sort(C,C+n);
int e1 = n - 1,e2 = e1;
while(e1 >= 0 && e2 >= 0){
if(A[e1] < B[e2]){
big[e2] = e1 + 1;
e2--;
}
else e1--;
}
e1 = e2 = 0;
while(e1 < n && e2 < n){
if(C[e1] > B[e2]){
ans += big[e2] * (n - e1);
e2++;
}
else e1++;
}
cout << ans;
return 0;
}