好哥哥 教教!
查看原帖
好哥哥 教教!
26950
KN1FEAX楼主2022/2/23 23:45

java用stringbuilder最快80分

混杂MLE和TLE

package P3865;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;

public class Main {

	public static void main(String[] args) throws IOException {
		int n, m;
		int l, r, s;
		StreamTokenizer st = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
		PrintWriter pw = new PrintWriter(new OutputStreamWriter(System.out));
		StringBuilder sb = new StringBuilder();
		st.nextToken();
		n = (int) st.nval;
		st.nextToken();
		m = (int) st.nval;
		int dp[][] = new int[n + 1][17];
		int log2[] = new int[n + 1];
		for (int i = 1; i <= n; i++) {
			st.nextToken();
			dp[i][0] = (int) st.nval;
		}
		for (int i = 2; i <= n; i++)
			log2[i] = log2[i / 2] + 1;
		int half, nexthalf;
		for (int i = 1; i <= 16; i++) {
			half = 1 << (i - 1);
			nexthalf = 1 << i;
			for (int j = 1; j + nexthalf - 1 <= n; j++) {
				dp[j][i] = Math.max(dp[j][i - 1], dp[j + half][i - 1]);
			}
		}
		for (int i = 1; i <= m; i++) {
			st.nextToken();
			l = (int) st.nval;
			st.nextToken();
			r = (int) st.nval;
			s = log2[r - l + 1];
			half = 1 << s;
			pw.println(Math.max(dp[l][s], dp[r - half + 1][s]));
			//sb.append(Math.max(dp[l][s], dp[r - half + 1][s]) + "\n");
		}
		pw.flush();
	}

}

2022/2/23 23:45
加载中...