From 39923f164b12f475ce03b2ec2c64924246c42bec Mon Sep 17 00:00:00 2001 From: JHLEE325 <82587652+JHLEE325@users.noreply.github.com> Date: Fri, 5 Sep 2025 08:23:01 +0900 Subject: [PATCH] =?UTF-8?q?[20250905]=20BOJ=20/=20G1=20/=20=EA=B5=AC?= =?UTF-8?q?=EA=B0=84=20=EA=B3=B1=20=EA=B5=AC=ED=95=98=EA=B8=B0=20/=20?= =?UTF-8?q?=EC=9D=B4=EC=A4=80=ED=9D=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...1 \352\265\254\355\225\230\352\270\260.md" | 77 +++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 "JHLEE325/202509/05 BOJ G1 \352\265\254\352\260\204 \352\263\261 \352\265\254\355\225\230\352\270\260.md" diff --git "a/JHLEE325/202509/05 BOJ G1 \352\265\254\352\260\204 \352\263\261 \352\265\254\355\225\230\352\270\260.md" "b/JHLEE325/202509/05 BOJ G1 \352\265\254\352\260\204 \352\263\261 \352\265\254\355\225\230\352\270\260.md" new file mode 100644 index 00000000..d5b41421 --- /dev/null +++ "b/JHLEE325/202509/05 BOJ G1 \352\265\254\352\260\204 \352\263\261 \352\265\254\355\225\230\352\270\260.md" @@ -0,0 +1,77 @@ +```java +import java.io.*; +import java.util.*; + +public class Main { + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + StringTokenizer st = new StringTokenizer(br.readLine()); + StringBuilder sb = new StringBuilder(); + + int n = Integer.parseInt(st.nextToken()); + int m = Integer.parseInt(st.nextToken()); + int k = Integer.parseInt(st.nextToken()); + + long[] arr = new long[n]; + long[] tree = new long[4 * n]; + + for (int i = 0; i < n; i++) { + arr[i] = Integer.parseInt(br.readLine()); + } + + init(arr, tree, 1, 0, n - 1); + + for (int i = 0; i < m + k; i++) { + st = new StringTokenizer(br.readLine()); + int op = Integer.parseInt(st.nextToken()); + int a = Integer.parseInt(st.nextToken()); + int b = Integer.parseInt(st.nextToken()); + + if (op == 2) { + sb.append(query(tree, 1, 0, n - 1, a - 1, b - 1) + "\n"); + } else { + update(arr, tree, 1, 0, n - 1, a - 1, b); + } + } + + System.out.println(sb.toString()); + } + + static void init(long[] arr, long[] tree, int node, int start, int end) { + if (start == end) { + tree[node] = arr[start]; + } else { + init(arr, tree, node * 2, start, (start + end) / 2); + init(arr, tree, node * 2 + 1, (start + end) / 2 + 1, end); + tree[node] = tree[node * 2] * tree[node * 2 + 1] % 1000000007; + } + } + + static void update(long[] arr, long[] tree, int node, int start, int end, int index, long val) { + if (index < start || index > end) { + return; + } + if (start == end) { + arr[index] = val; + tree[node] = val; + return; + } + update(arr, tree, node * 2, start, (start + end) / 2, index, val); + update(arr, tree, node * 2 + 1, (start + end) / 2 + 1, end, index, val); + tree[node] = tree[node * 2] * tree[node * 2 + 1] % 1000000007; + } + + static long query(long[] tree, int node, int start, int end, int left, int right) { + if (left > end || right < start) { + return 1; + } + if (left <= start && end <= right) { + return tree[node]; + } + long lmul = query(tree, node * 2, start, (start + end) / 2, left, right); + long rmul = query(tree, node * 2 + 1, (start + end) / 2 + 1, end, left, right); + return lmul * rmul % 1000000007; + } +} +```