蓝桥杯 递增三元组

给定三个整数数组 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。
对于30%的数据,1 <= N <= 100 
对于60%的数据,1 <= N <= 1000 
对于100%的数据,1 <= N <=100000 0 <= Ai, Bi, Ci <= 100000
【输出格式】 一个整数表示答案
【输入样例】 
3
1 1 1
2 2 2
3 3 3
【输出样例】
27
import java.util.Arrays;
import java.util.Scanner;

public class Main {
	
public static void main(String[] args) {
	Scanner s=new Scanner(System.in);
	int n=s.nextInt();
	int sum=0;
	int a[]=new int[n];
	int b[]=new int[n];
	int c[]=new int[n];
	int t[]=new int[n];
	for(int i=0;i<n;i++) {
		a[i]=s.nextInt();
	}
	for(int i=0;i<n;i++) {
		b[i]=s.nextInt();
	}
	for(int i=0;i<n;i++) {
		c[i]=s.nextInt();
	}
	Arrays.sort(a);
	Arrays.sort(b);
	Arrays.sort(c);
	int i=n-1;
	int j=n-1;
	while(i>=0&&j>=0) {
		while(i>=0&&j>=0) {
		if(b[j]>a[i]) {
			t[j]=i+1;
			break;
		}else {
			i--;
		}
		}
		j--;
	}
	
	i=0;
	j=0;
	
	while(i<n&&j<n) {
		while(i<n&&j<n) {
		if(c[j]>b[i]) {
			sum+=t[i]*(n-j);
			break;
		}else {
			j++;
		}
		}
		i++;
	}
	s.close();
	System.out.println(sum);
}
}

猜你喜欢

转载自blog.csdn.net/HZPHYT/article/details/88357738