問題リンク
https://paiza.jp/works/mondai/query_primer/query_primer__square_division
現状
現在PaizaにおいてJavaの学習を進めています。
その中で平方分割について学んでおり、「長さ10000の数列Aと3つの区間が与えられ、その区間に置けるそれぞれの最大値を出力する」という問題で実行時間を縮めることができずに困っています。
該当のソースコード
Java
1import java.util.*; 2 3public class Main { 4 public static void main(String[] args) throws Exception { 5 Scanner sc = new Scanner(System.in); 6 7 int K = sc.nextInt(); 8 9 int[] array = new int[10000]; 10 int[] rangeMax = new int[100]; 11 12 for(int i=0; i<10000; i++){ 13 array[i] = sc.nextInt(); 14 } 15 16 for(int i=0; i<100; i++){ 17 int min = -100000; 18 int start = i * 100; 19 int end = (i + 1) * 100; 20 21 for(int j=start; j<end; j++){ 22 if(array[j] >= min){ 23 min = array[j]; 24 } 25 } 26 27 rangeMax[i] = min; 28 } 29 30 for(int i = 0; i < K; i++){ 31 int left = sc.nextInt() - 1; 32 int right = sc.nextInt() - 1; 33 int now = left; 34 int ans = array[left]; 35 36 while(now <= right){ 37 if((now % 100 == 0) & (now + 100 - 1 <= right)){ 38 if(ans <= rangeMax[now / 100]){ 39 ans = rangeMax[now / 100]; 40 } 41 } 42 else{ 43 if(ans <= array[now]){ 44 ans = array[now]; 45 now++; 46 } 47 } 48 } 49 50 System.out.println(ans); 51 } 52 } 53}
回答2件
あなたの回答
tips
プレビュー