有没有Java大佬帮忙看一下,50分,后面全部MLE
  • 板块P1908 逆序对
  • 楼主charmmm
  • 当前回复7
  • 已保存回复7
  • 发布时间2023/3/27 13:31
  • 上次更新2023/10/23 20:20:21
查看原帖
有没有Java大佬帮忙看一下,50分,后面全部MLE
668407
charmmm楼主2023/3/27 13:31
import java.util.*;
import java.io.*;

public class Main {
    static int N = 500010;
    static int[] ranks = new int[N];
    static int[] tree = new int[N];
    // pair<val,index>
    static List<int[]> a = new ArrayList<>();
    public static void main(String[] args) throws IOException{
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out));
        int n = Integer.parseInt(in.readLine()),val,idx;
        String[] s = in.readLine().split(" ");
        a.add(new int[]{0,0});
        for (int i = 1; i<=n; ++i) {
            val = Integer.parseInt(s[i-1]);
            idx = i;
            a.add(new int[]{val,idx});
        }
        // 排序
        Collections.sort(a,(o1,o2)->o1[0]==o2[0]?o1[1]-o2[1]:o1[0]-o2[0]);
        for (int i = 1;i<=n; ++i) {
            ranks[a.get(i)[1]] = i;
        }
        long res = 0;
        for (int i = n; i>=1; --i) {
            int cnt = query(ranks[i]);
            res+=cnt;
            update(ranks[i],1,n);
        }
        out.write(res + "\n");
        out.flush();
        out.close();
        in.close();
    }
    
    public static int lowbit(int x) {
        return x&(-x);
    }
    
    public static void update(int x,int y,int n){
        for (int i = x; i<=n; i+=lowbit(i)) {
            tree[i]+=y;
        }
    }
    
    public static int query(int n) {
        int res = 0;
        for (int i = n; i!=0; i-=lowbit(i)) {
            res += tree[i];
        }
        return res;
    }
}
2023/3/27 13:31
加载中...