Skip to content

Commit 8f0ef71

Browse files
authored
Merge pull request #820 from AlgorithmWithGod/JHLEE325
[20250905] BOJ / G1 / 구간 곱 구하기 / 이준희
2 parents b6fa5cb + 39923f1 commit 8f0ef71

File tree

1 file changed

+77
-0
lines changed

1 file changed

+77
-0
lines changed
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
```java
2+
import java.io.*;
3+
import java.util.*;
4+
5+
public class Main {
6+
7+
public static void main(String[] args) throws IOException {
8+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
9+
StringTokenizer st = new StringTokenizer(br.readLine());
10+
StringBuilder sb = new StringBuilder();
11+
12+
int n = Integer.parseInt(st.nextToken());
13+
int m = Integer.parseInt(st.nextToken());
14+
int k = Integer.parseInt(st.nextToken());
15+
16+
long[] arr = new long[n];
17+
long[] tree = new long[4 * n];
18+
19+
for (int i = 0; i < n; i++) {
20+
arr[i] = Integer.parseInt(br.readLine());
21+
}
22+
23+
init(arr, tree, 1, 0, n - 1);
24+
25+
for (int i = 0; i < m + k; i++) {
26+
st = new StringTokenizer(br.readLine());
27+
int op = Integer.parseInt(st.nextToken());
28+
int a = Integer.parseInt(st.nextToken());
29+
int b = Integer.parseInt(st.nextToken());
30+
31+
if (op == 2) {
32+
sb.append(query(tree, 1, 0, n - 1, a - 1, b - 1) + "\n");
33+
} else {
34+
update(arr, tree, 1, 0, n - 1, a - 1, b);
35+
}
36+
}
37+
38+
System.out.println(sb.toString());
39+
}
40+
41+
static void init(long[] arr, long[] tree, int node, int start, int end) {
42+
if (start == end) {
43+
tree[node] = arr[start];
44+
} else {
45+
init(arr, tree, node * 2, start, (start + end) / 2);
46+
init(arr, tree, node * 2 + 1, (start + end) / 2 + 1, end);
47+
tree[node] = tree[node * 2] * tree[node * 2 + 1] % 1000000007;
48+
}
49+
}
50+
51+
static void update(long[] arr, long[] tree, int node, int start, int end, int index, long val) {
52+
if (index < start || index > end) {
53+
return;
54+
}
55+
if (start == end) {
56+
arr[index] = val;
57+
tree[node] = val;
58+
return;
59+
}
60+
update(arr, tree, node * 2, start, (start + end) / 2, index, val);
61+
update(arr, tree, node * 2 + 1, (start + end) / 2 + 1, end, index, val);
62+
tree[node] = tree[node * 2] * tree[node * 2 + 1] % 1000000007;
63+
}
64+
65+
static long query(long[] tree, int node, int start, int end, int left, int right) {
66+
if (left > end || right < start) {
67+
return 1;
68+
}
69+
if (left <= start && end <= right) {
70+
return tree[node];
71+
}
72+
long lmul = query(tree, node * 2, start, (start + end) / 2, left, right);
73+
long rmul = query(tree, node * 2 + 1, (start + end) / 2 + 1, end, left, right);
74+
return lmul * rmul % 1000000007;
75+
}
76+
}
77+
```

0 commit comments

Comments
 (0)