Skip to content

Commit e52e96c

Browse files
committed
[20251102] BOJ / G1 / 수열과 쿼리 17 / 김민진
1 parent 5022e2e commit e52e96c

File tree

1 file changed

+99
-0
lines changed

1 file changed

+99
-0
lines changed
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
```java
2+
import java.io.*;
3+
import java.util.StringTokenizer;
4+
5+
public class BJ_14438_수열과_쿼리_17 {
6+
7+
private static final int INF = Integer.MAX_VALUE;
8+
9+
private static final BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
10+
private static final BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
11+
private static final StringBuilder sb = new StringBuilder();
12+
private static StringTokenizer st;
13+
14+
private static int N, M;
15+
private static int[] nums, segTree;
16+
17+
public static void main(String[] args) throws IOException {
18+
init();
19+
sol();
20+
}
21+
22+
private static void init() throws IOException {
23+
N = Integer.parseInt(br.readLine());
24+
25+
nums = new int[N + 1];
26+
segTree = new int[N * 4];
27+
st = new StringTokenizer(br.readLine());
28+
for (int i = 1; i <= N; i++) {
29+
nums[i] = Integer.parseInt(st.nextToken());
30+
}
31+
32+
initSegTree(1, 1, N);
33+
34+
M = Integer.parseInt(br.readLine());
35+
}
36+
37+
private static void sol() throws IOException {
38+
while (M-- > 0) {
39+
st = new StringTokenizer(br.readLine());
40+
41+
int cmd = Integer.parseInt(st.nextToken());
42+
int a = Integer.parseInt(st.nextToken());
43+
int b = Integer.parseInt(st.nextToken());
44+
45+
if (cmd == 1) {
46+
update(1, 1, N, a, b);
47+
} else if (cmd == 2) {
48+
bw.write(getMin(1, 1, N, a, b) + "\n");
49+
}
50+
}
51+
bw.flush();
52+
bw.close();
53+
br.close();
54+
}
55+
56+
private static int initSegTree(int node, int start, int end) {
57+
if (start == end) {
58+
return segTree[node] = nums[start];
59+
}
60+
61+
int mid = start + (end - start) / 2;
62+
63+
return segTree[node] = Math.min(initSegTree(node * 2, start, mid), initSegTree(node * 2 + 1, mid + 1, end));
64+
}
65+
66+
private static int update(int node, int start, int end, int target, int update) {
67+
if (target < start || end < target) {
68+
return segTree[node];
69+
}
70+
71+
if (start == end) {
72+
return segTree[node] = update;
73+
}
74+
75+
int mid = start + (end - start) / 2;
76+
77+
int left = update(node * 2, start, mid, target, update);
78+
int right = update(node * 2 + 1, mid + 1, end, target, update);
79+
80+
return segTree[node] = Math.min(left, right);
81+
}
82+
83+
private static int getMin(int node, int start, int end, int left, int right) {
84+
if (right < start || end < left) {
85+
return INF;
86+
}
87+
88+
if (left <= start && end <= right) {
89+
return segTree[node];
90+
}
91+
92+
int mid = start + (end - start) / 2;
93+
94+
return Math.min(getMin(node * 2, start, mid, left, right)
95+
, getMin(node * 2 + 1, mid + 1, end, left, right));
96+
}
97+
98+
}
99+
```

0 commit comments

Comments
 (0)