给定三个整数数组
A = [A_1, A_2, \cdots A_N]A=[A
1
,A
2
,⋯A
N
],
B = [B_1, B_2, \cdots B_N]B=[B
1
,B
2
,⋯B
N
],
C = [C_1, C_2, \cdots C_N]C=[C
1
,C
2
,⋯C
N
],
请你统计有多少个三元组 (i, j, k)(i,j,k) 满足:
1 \leq i, j, k \leq N1≤i,j,k≤N;
A_i < B_j < C_kA
i
<B
j
<C
k
。
输入描述
第一行包含一个整数 NN。
第二行包含 NN 个整数 A_1, A_2, \cdots A_NA
1
,A
2
,⋯A
N
。
第三行包含 NN 个整数 B_1, B_2, \cdots B_NB
1
,B
2
,⋯B
N
。
第四行包含 NN 个整数 C_1, C_2, \cdots C_NC
1
,C
2
,⋯C
N
。
其中,1 \leq N \leq 10^5, 0 \leq Ai, Bi, Ci \leq 10^51≤N≤10
5
,0≤Ai,Bi,Ci≤10
5
。
输出描述
输出一个整数表示答案。
输入输出样例
示例
输入
3
1 1 1
2 2 2
3 3 3
copy
输出
27
//简简单单
import java.util.Arrays;
import java.util.Scanner;
public class Main{
static int count = 0;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[][] list = new int[3][n];
long[][] dp = new long[3][n];
for (int i = 0 ; i <3 ; i++){
for (int x = 0 ; x < n ; x++){
list[i][x] = sc.nextInt();
}
Arrays.sort(list[i]);
}
for (int i = 0 ; i < list[0].length;i++){
dp[0][i] = 1;
}
for (int i = 1 ; i < 3 ; i++ ){
int tmp = 0;
for (int x = 0 ; x < list[i].length ; x++){
long sum = 0;
if (x != 0) {
sum = dp[i][x - 1];
}
while (tmp < list[i-1].length){
if (list[i-1][tmp] >= list[i][x]) {
break;
}
sum += dp[i-1][tmp];
tmp++;
}
dp[i][x] = sum;
}
}
long sum = 0;
for (int i = 0 ; i < dp[2].length ; i++){
sum+=dp[2][i];
}
System.out.println(sum);
}
}