📢📢📢哈喽呀,大家好,来看今天的题目吧
🍭🍭🍭ASC🍭🍭🍭
📋问题描述

❓思路分享
🍭直接输出L-A+65即可
📗参考代码
/**
* @ClassName ASC
* @Author @浅夜
* @Date 2023/3/20 20:30
* @Version 1.0
*/
public class Main {
public static void main(String[] args) {
System.out.println('L' - 'A' + 65);
}
}

🍑🍑🍑递增三元组🍑🍑🍑
📋问题描述


❓思路分享
🍑最直接的想法就是根据题意来暴力了,但是三个for循环下来会超时是毋庸置疑的,如果直接暴力就会超时三个样例,那么就需要优化了

那么这个暴力如何优化呢?
🍑分别对a,c数组进行排序,我们可以遍历b数组,依次二分查找出a数组中小于该元素的最大值,c数组中大于该元素的最小值。然后计算出两边符合条件的元素个数,相乘就是每种b数组元素下的方案数,累加起来就是总的递增三元组的个数。
📗参考代码
import java.util.Arrays;
import java.util.Scanner;
/**
* @ClassName 递增三元组_二分
* @Author @浅夜
* @Date 2023/3/20 21:15
* @Version 1.0
*/
public class 递增三元组_二分 {
static int N = 100010;
static int[] a = new int[N], b = new int[N], c = new int[N];
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
for (int i = 0; i < n; i++) a[i] = sc.nextInt();
for (int i = 0; i < n; i++) b[i] = sc.nextInt();
for (int i = 0; i < n; i++) c[i] = sc.nextInt();
Arrays.sort(a, 0, n);
Arrays.sort(c, 0, n);
long ans = 0;
for (int i = 0; i < n; i++) {
int l = 0, r = n - 1;
while (l < r) {
int mid = (l + r + 1) >> 1;
if (a[mid] < b[i]) l = mid; //此时a数组中的mid偏小,舍去二分左边,保留右边
else r = mid - 1;
}
int t = r; //备份a数组二分的结果
l = 0;
r = n - 1;
while (l < r) {
int mid = l + r >> 1;
if (c[mid] > b[i]) r = mid; //此时c数组中的mid下标元素偏大,舍去右边,找最小满足的
else l = mid + 1;
}
if (b[i] > a[t] && b[i] < c[r]) ans += (long)(t + 1) * (n - r);
}
System.out.println(ans);
}
}