java线段树 TLE 6 10 11 求help
  • 板块P1816 忠诚
  • 楼主0x3ff
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/5/15 19:20
  • 上次更新2024/5/15 21:18:03
查看原帖
java线段树 TLE 6 10 11 求help
836789
0x3ff楼主2024/5/15 19:20
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
	static int[] val;
	static int[] money;
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        //在此输入您的代码...
        int n = scan.nextInt(), m = scan.nextInt();
        val = new int[n];
        for(int i = 0; i < n; i++)
        	val[i] = scan.nextInt();
        money = new int[n << 2];
        build(1, 1, n);
        int[] ans = new int[m];
        for(int i = 0; i < m; i++) {
        	int x = scan.nextInt(), y = scan.nextInt();
        	ans[i] = query(1, 1, n, x, y);
        }
        for(int i = 0; i < m; i++)
        	System.out.print(ans[i] + " ");
        scan.close();
    }
    static void build(int cur, int l, int r) {
    	if(l == r) {
    		money[cur] = val[l - 1];
    		return;
    	}
    	int m = (l + r) >> 1;
        build(cur << 1, l, m);
        build(cur << 1 | 1, m + 1, r);
        money[cur] = Math.min(money[cur << 1], money[cur << 1 | 1]);
    }
    
    static int query(int cur, int l, int r, int x, int y) {
    	if(x <= l && y >= r) return money[cur];
    	int m = (l + r) >> 1;
        int ans = Integer.MAX_VALUE;
        if(x <= m) ans = Math.min(ans, query(cur << 1, l, m, x, y));
        if(y >= m + 1) ans = Math.min(ans, query(cur << 1 | 1, m + 1, r, x, y));
        return ans;
    }
}
2024/5/15 19:20
加载中...