Skip to content

Commit 29fa3df

Browse files
authored
Merge pull request #220 from AlgorithmWithGod/ShinHeeEul
[20250310] BOJ / G1 / Balanced Lineup / 신희을
2 parents 8d7f3ba + 4639094 commit 29fa3df

File tree

1 file changed

+84
-0
lines changed

1 file changed

+84
-0
lines changed
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
```java
2+
import java.io.*;
3+
import java.util.*;
4+
5+
public class Main {
6+
7+
static int[] minSegments;
8+
static int[] maxSegments;
9+
static int size;
10+
11+
public static void main(String[] args) throws Exception{
12+
int N = read();
13+
int Q = read();
14+
size = 1;
15+
while(size < N) {
16+
size <<= 1;
17+
}
18+
19+
minSegments = new int[(size << 1) + 1];
20+
Arrays.fill(minSegments, Integer.MAX_VALUE);
21+
maxSegments = new int[(size << 1) + 1];
22+
23+
for(int i = size + 1; i < size + N + 1; i++) {
24+
int val = read();
25+
minSegments[i] = val;
26+
maxSegments[i] = val;
27+
}
28+
29+
int segmentSize = minSegments.length - 1;
30+
31+
while(segmentSize > 2) {
32+
minSegments[segmentSize >> 1] = Math.min(minSegments[segmentSize], minSegments[segmentSize - 1]);
33+
maxSegments[segmentSize >> 1] = Math.max(maxSegments[segmentSize], maxSegments[segmentSize - 1]);
34+
segmentSize -= 2;
35+
}
36+
37+
StringBuilder sb = new StringBuilder();
38+
while(Q --> 0) {
39+
int a = read();
40+
int b = read();
41+
42+
int min = query(a, b, 2, 1, size, false);
43+
int max = query(a, b, 2, 1, size, true);
44+
sb.append(max - min).append("\n");
45+
46+
}
47+
48+
System.out.println(sb);
49+
}
50+
51+
public static int query(int left, int right, int node, int start, int end, boolean b) {
52+
53+
if(end < left || right < start) {
54+
return b ? 0 : Integer.MAX_VALUE;
55+
}
56+
57+
if(left <= start && end <= right) {
58+
return b ? maxSegments[node] : minSegments[node];
59+
}
60+
61+
int mid = (start + end) >> 1;
62+
63+
if(b) {
64+
return Math.max(query(left, right, (node << 1) - 1, start, mid ,b),
65+
query(left, right, (node << 1), mid + 1, end, b));
66+
} else {
67+
return Math.min(query(left, right, (node << 1) - 1, start, mid ,b),
68+
query(left, right, (node << 1), mid + 1, end, b));
69+
}
70+
}
71+
72+
73+
private static int read() throws Exception {
74+
int d, o;
75+
d = System.in.read();
76+
77+
o = d & 15;
78+
while ((d = System.in.read()) > 32)
79+
o = (o << 3) + (o << 1) + (d & 15);
80+
81+
return o;
82+
}
83+
}
84+
```

0 commit comments

Comments
 (0)