반응형
BOJ 11505 풀이 코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class Main {
static class SegmentTree{
private long[] tree;
SegmentTree(int n){
double height = Math.ceil(Math.log(n)/Math.log(2))+1;
long size = Math.round(Math.pow(2, height));
tree = new long[Math.toIntExact(size)];
}
long init(long[] arr, int node, int start, int end) {
if(start == end) {
return tree[node] = arr[start];
}
return tree[node] = (init(arr, node*2, start, (start+end)/2) *
init(arr, node*2+1, (start+end)/2+1, end)) % 1000000007;
}
long mul(int node, int start, int end, int left, int right) {
if(left > end || right < start)
return 1;
else if(left <= start && end <= right) {
return tree[node];
}
return (mul(node*2, start, (start+end)/2, left, right) *
mul(node*2+1, (start+end)/2+1, end, left, right)) % 1000000007;
}
long update(int node, int start, int end, int index, long change) {
if(index < start || index > end) {
return tree[node];
} else if(start == index && end == index) {
return tree[node] = change;
}
return tree[node] = (update(node*2, start, (start+end)/2, index, change) *
update(node*2+1, (start+end)/2+1, end, index, change)) % 1000000007;
}
}
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer str = new StringTokenizer(br.readLine(), " ");
int n = Integer.parseInt(str.nextToken());
int m = Integer.parseInt(str.nextToken());
int k = Integer.parseInt(str.nextToken());
long[] arr= new long[n+1];
for(int i = 1; i <= n; i ++) {
arr[i] = Integer.parseInt(br.readLine());
}
SegmentTree tree= new SegmentTree(n);
tree.init(arr, 1, 1, n);
for(int i = 0; i < m + k; i++) {
str = new StringTokenizer(br.readLine(), " ");
int t = Integer.parseInt(str.nextToken());
int idx = Integer.parseInt(str.nextToken());
int v = Integer.parseInt(str.nextToken());
if(t == 1) {
tree.update(1, 1, n, idx, v);
} else {
bw.write(tree.mul(1, 1, n, idx, v) + "\n");
}
}
bw.flush();
bw.close();
br.close();
}
}
반응형
'코딩 문제 풀이 > 백준' 카테고리의 다른 글
[백준] 자바 문제 풀이 10868 : 골드1 (0) | 2023.09.23 |
---|---|
[백준] 자바 문제 풀이 10775 : 골드2 (0) | 2023.09.23 |
[백준] 자바 문제 풀이 2109 : 골드3 (0) | 2023.09.23 |
[백준] 자바 문제 풀이 17822 : 골드2 (0) | 2023.09.22 |
[백준] 자바 문제 풀이 1715 : 골드4 (0) | 2023.09.22 |