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();
}
}