给定三个整数数组
A = [ A 1 , A 2 , … A N ] , A=[A_1,A_2,…A_N], A=[A1,A2,…AN],
B = [ B 1 , B 2 , … B N ] , B=[B_1,B_2,…B_N], B=[B1,B2,…BN],
C = [ C 1 , C 2 , … C N ] , C=[C_1,C_2,…C_N], C=[C1,C2,…CN],
请你统计有多少个三元组 (i,j,k)
满足:
1 ≤ i , j , k ≤ N 1 ≤ i, j, k ≤ N 1≤i,j,k≤N
A i < B j < C k A_i < B_j < C_k Ai<Bj<Ck
第一行包含一个整数 N。
第二行包含 N 个整数 A 1 , A 2 , … A N A_1,A_2,…A_N A1,A2,…AN
第三行包含 N 个整数 B 1 , B 2 , … B N B_1,B_2,…B_N B1,B2,…BN
第四行包含 N 个整数 C 1 , C 2 , … C N C_1,C_2,…C_N C1,C2,…CN
一个整数表示答案。
1 ≤ N ≤ 1 0 5 10^5 105,
0≤ A i , B i , C i A_i,B_i,C_i Ai,Bi,Ci ≤ 1 0 5 10^5 105
3
1 1 1
2 2 2
3 3 3
27
if (a[l] >= b[j])
l = -1;
if (c[p] <= b[j])
p = n;
#include
#include
#include
#include
using namespace std;
const int N = 100005;
int a[N], b[N], c[N];
int n, sum;
int main () {
cin >> n;
for (int i = 0; i < n; i ++)
cin >> a[i];
for (int i = 0; i < n; i ++)
cin >> b[i];
for (int i = 0; i < n; i ++)
cin >> c[i];
for (int j = 0; j < n; j ++) {
sort(a, a + n);
sort(c, c + n);
int l = 0, r = n - 1;
while (l < r) {
int mid = (l + r + 1) / 2;
if (a[mid] < b[j])
l = mid;
else
r = mid - 1;
}
if (a[l] >= b[j])
l = -1;
int p = 0, q = n - 1;
while (p < q) {
int mid = (p + q) / 2;
if (c[mid] > b[j])
q = mid;
else
p = mid + 1;
}
if (c[p] <= b[j])
p = n;
sum += (l + 1) * (n - p); // A C 是相互独立的,数量应该乘起来
}
cout << sum << endl;
return 0;
}