弱鸡的二分查找算法,特别慢,我也不知道怎么过的。
import java.io.*;
import java.math.*;
import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int T = sc.nextInt();
        for (int i = 0; i < T; i++) {
            int best = 0;
            int cur = 0;
            int n = sc.nextInt();
            ArrayList<Integer> nums = new ArrayList<>();
            for (int j = 0; j < n; j++) {
                int target = sc.nextInt();
                if (j != 0) {
                    int lower = lower_bound(nums, j, target);
                    int upper = upper_bound(nums, j, target);
                    cur += lower;
                    cur -= j - upper;
                    nums.add(upper, target);
                } else {
                    nums.add(target);
                }
                if (cur > best) {
                    best = cur;
                }
            }
            System.out.printf("%d %d\n", best, cur);
        }
    }
    public static int lower_bound(List<Integer> nums, int size, int target) {
        int low = 0, high = size;
        while (low < high) {
            int mid = (high - low) / 2 + low;
            if (nums.get(mid) < target) low = mid + 1;
            else high = mid;
        }
        return low;
    }
    public static int upper_bound(List<Integer> nums, int size, int target) {
        int low = 0, high = size;
        while (low < high) {
            int mid = (high - low) / 2 + low;
            if (nums.get(mid) <= target) low = mid + 1;
            else high = mid;
        }
        return low;
    }
}