= max(0, l); int tr = min(n - 1, r); int ans = MAX; // 左から探す while (tl < tr && tl % b != 0) ans = min(a[tl++], ans); // 右から探す while (tl < tr && (tr + 1) % b != 0) ans = min(a[tr--], ans); // bucket 単位で探す while (tl < tr) { int bi = tl / b; ans = min(ans, bucket[bi]); tl += b; } return ans; } 6